diff --git a/src/Umbraco.Core/Models/Macro.cs b/src/Umbraco.Core/Models/Macro.cs index fbe49e65b4..63ce05ea4c 100644 --- a/src/Umbraco.Core/Models/Macro.cs +++ b/src/Umbraco.Core/Models/Macro.cs @@ -152,6 +152,17 @@ namespace Umbraco.Core.Models _removedProperties.Add(alias); } } + + internal override void ResetDirtyProperties(bool rememberPreviouslyChangedProperties) + { + _addedProperties.Clear(); + _removedProperties.Clear(); + base.ResetDirtyProperties(rememberPreviouslyChangedProperties); + foreach (var prop in Properties) + { + ((TracksChangesEntityBase)prop).ResetDirtyProperties(rememberPreviouslyChangedProperties); + } + } /// /// Used internally to check if we need to add a section in the repository to the db diff --git a/src/Umbraco.Core/Models/MacroProperty.cs b/src/Umbraco.Core/Models/MacroProperty.cs index 199c1e7fe6..5db932f618 100644 --- a/src/Umbraco.Core/Models/MacroProperty.cs +++ b/src/Umbraco.Core/Models/MacroProperty.cs @@ -12,6 +12,19 @@ namespace Umbraco.Core.Models [DataContract(IsReference = true)] internal class MacroProperty : TracksChangesEntityBase, IMacroProperty, IRememberBeingDirty { + public MacroProperty() + { + + } + + public MacroProperty(string @alias, string name, int sortOrder, IMacroPropertyType propertyType) + { + _alias = alias; + _name = name; + _sortOrder = sortOrder; + _propertyType = propertyType; + } + private string _alias; private string _name; private int _sortOrder; diff --git a/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs b/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs index 729d0d97f3..01cc58843d 100644 --- a/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs @@ -12,6 +12,7 @@ namespace Umbraco.Core.Models.Rdbms [PrimaryKeyColumn] public int Id { get; set; } + //NOTE: This column is not used, we always show the properties [Column("macroPropertyHidden")] [Constraint(Default = "0")] public bool Hidden { get; set; } diff --git a/src/Umbraco.Core/Persistence/Factories/MacroFactory.cs b/src/Umbraco.Core/Persistence/Factories/MacroFactory.cs index 613dae6f2e..4203a9f564 100644 --- a/src/Umbraco.Core/Persistence/Factories/MacroFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/MacroFactory.cs @@ -1,4 +1,5 @@ -using System.Globalization; +using System.Collections.Generic; +using System.Globalization; using Umbraco.Core.Models; using Umbraco.Core.Models.Rdbms; @@ -11,6 +12,11 @@ namespace Umbraco.Core.Persistence.Factories public IMacro BuildEntity(MacroDto dto) { var model = new Macro(dto.Id, dto.UseInEditor, dto.RefreshRate, dto.Alias, dto.Name, dto.ScriptType, dto.ScriptAssembly, dto.Xslt, dto.CacheByPage, dto.CachePersonalized, dto.DontRender, dto.Python); + foreach (var p in dto.MacroPropertyDtos) + { + model.Properties.Add(new MacroProperty(p.Alias, p.Name, p.SortOrder, null)); + } + //on initial construction we don't want to have dirty properties tracked // http://issues.umbraco.org/issue/U4-1946 model.ResetDirtyProperties(false); @@ -31,8 +37,10 @@ namespace Umbraco.Core.Persistence.Factories ScriptAssembly = entity.ControlAssembly, ScriptType = entity.ControlType, UseInEditor = entity.UseInEditor, - Xslt = entity.XsltPath + Xslt = entity.XsltPath, + MacroPropertyDtos = BuildPropertyDtos(entity) }; + if (entity.HasIdentity) dto.Id = short.Parse(entity.Id.ToString(CultureInfo.InvariantCulture)); @@ -40,5 +48,25 @@ namespace Umbraco.Core.Persistence.Factories } #endregion + + private List BuildPropertyDtos(IMacro entity) + { + var list = new List(); + foreach (var p in entity.Properties) + { + var text = new MacroPropertyDto + { + Alias = p.Alias, + Name = p.Name, + Macro = entity.Id, + SortOrder = (byte)p.SortOrder, + //TODO: WE need to change this column to store an alias!!!! for now I'm just hard coding this until we go to that part. + Type = 16 + }; + + list.Add(text); + } + return list; + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/IMacroService.cs b/src/Umbraco.Core/Services/IMacroService.cs new file mode 100644 index 0000000000..d2477a061e --- /dev/null +++ b/src/Umbraco.Core/Services/IMacroService.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; +using Umbraco.Core.Models; + +namespace Umbraco.Core.Services +{ + /// + /// Defines the ContentService, which is an easy access to operations involving + /// + internal interface IMacroService : IService + { + //TODO Possibly create import macro method and ToXml? + + /// + /// Gets an object by its alias + /// + /// Alias to retrieve an for + /// An object + IMacro GetByAlias(string alias); + + /// + /// Gets a list all available objects + /// + /// Optional array of aliases to limit the results + /// An enumerable list of objects + IEnumerable GetAll(params string[] aliases); + + /// + /// Deletes an + /// + /// to delete + /// Optional id of the user deleting the macro + void Delete(IMacro macro, int userId = 0); + + /// + /// Saves an + /// + /// to save + /// Optional id of the user saving the macro + void Save(IMacro macro, int userId = 0); + + /// + /// Gets a list all available plugins + /// + /// An enumerable list of objects + IEnumerable GetMacroPropertyTypes(); + + /// + /// Gets an by its alias + /// + /// Alias to retrieve an for + /// An object + IMacroPropertyType GetMacroPropertyTypeByAlias(string alias); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Services/MacroService.cs b/src/Umbraco.Core/Services/MacroService.cs new file mode 100644 index 0000000000..7d1f9e89c4 --- /dev/null +++ b/src/Umbraco.Core/Services/MacroService.cs @@ -0,0 +1,168 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Umbraco.Core.Auditing; +using Umbraco.Core.Events; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.UnitOfWork; + +namespace Umbraco.Core.Services +{ + /// + /// Represents the Macro Service, which is an easy access to operations involving + /// + internal class MacroService : IMacroService + { + private readonly RepositoryFactory _repositoryFactory; + private readonly IUnitOfWorkProvider _uowProvider; + + public MacroService() + : this(new RepositoryFactory()) + { + } + + public MacroService(RepositoryFactory repositoryFactory) + : this(new FileUnitOfWorkProvider(), repositoryFactory) + { + } + + public MacroService(IUnitOfWorkProvider provider) + : this(provider, new RepositoryFactory()) + { + } + + public MacroService(IUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) : this(provider, repositoryFactory, false) + { + } + + public MacroService(IUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, bool ensureCachedMacros) + { + _uowProvider = provider; + _repositoryFactory = repositoryFactory; + + if(ensureCachedMacros) + EnsureMacroCache(); + } + + /// + /// Ensures the macro cache by getting all macros + /// from the repository and thus caching them. + /// + private void EnsureMacroCache() + { + IEnumerable macros = GetAll(); + } + + /// + /// Gets an object by its alias + /// + /// Alias to retrieve an for + /// An object + public IMacro GetByAlias(string alias) + { + using (var repository = _repositoryFactory.CreateMacroRepository(_uowProvider.GetUnitOfWork())) + { + return repository.Get(alias); + } + } + + /// + /// Gets a list all available objects + /// + /// Optional array of aliases to limit the results + /// An enumerable list of objects + public IEnumerable GetAll(params string[] aliases) + { + using (var repository = _repositoryFactory.CreateMacroRepository(_uowProvider.GetUnitOfWork())) + { + return repository.GetAll(aliases); + } + } + + /// + /// Deletes an + /// + /// to delete + /// Optional id of the user deleting the macro + public void Delete(IMacro macro, int userId = 0) + { + if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs(macro), this)) + return; + + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateMacroRepository(uow)) + { + repository.Delete(macro); + uow.Commit(); + + Deleted.RaiseEvent(new DeleteEventArgs(macro, false), this); + } + + Audit.Add(AuditTypes.Delete, "Delete Macro performed by user", userId, -1); + } + + /// + /// Saves an + /// + /// to save + /// Optional Id of the user deleting the macro + public void Save(IMacro macro, int userId = 0) + { + if (Saving.IsRaisedEventCancelled(new SaveEventArgs(macro), this)) + return; + + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateMacroRepository(uow)) + { + repository.AddOrUpdate(macro); + uow.Commit(); + + Saved.RaiseEvent(new SaveEventArgs(macro, false), this); + } + + Audit.Add(AuditTypes.Save, "Save Macro performed by user", userId, -1); + } + + /// + /// Gets a list all available plugins + /// + /// An enumerable list of objects + public IEnumerable GetMacroPropertyTypes() + { + return MacroPropertyTypeResolver.Current.MacroPropertyTypes; + } + + /// + /// Gets an by its alias + /// + /// Alias to retrieve an for + /// An object + public IMacroPropertyType GetMacroPropertyTypeByAlias(string alias) + { + return MacroPropertyTypeResolver.Current.MacroPropertyTypes.FirstOrDefault(x => x.Alias == alias); + } + + #region Event Handlers + /// + /// Occurs before Delete + /// + public static event TypedEventHandler> Deleting; + + /// + /// Occurs after Delete + /// + public static event TypedEventHandler> Deleted; + + /// + /// Occurs before Save + /// + public static event TypedEventHandler> Saving; + + /// + /// Occurs after Save + /// + public static event TypedEventHandler> Saved; + #endregion + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs new file mode 100644 index 0000000000..0b45c4de64 --- /dev/null +++ b/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs @@ -0,0 +1,383 @@ +using System.Data.SqlServerCe; +using System.Linq; +using NUnit.Framework; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Querying; +using Umbraco.Core.Persistence.Repositories; +using Umbraco.Core.Persistence.UnitOfWork; +using Umbraco.Tests.TestHelpers; + +namespace Umbraco.Tests.Persistence.Repositories +{ + [TestFixture] + public class MacroRepositoryTest : BaseDatabaseFactoryTest + { + [SetUp] + public override void Initialize() + { + base.Initialize(); + + CreateTestData(); + } + + [Test] + public void Cannot_Add_Duplicate_Macros() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + + // Act + using (var repository = new MacroRepository(unitOfWork)) + { + var macro = new Macro("test", "Test", "~/usercontrol/blah.ascx", "MyAssembly", "test.xslt", "~/views/macropartials/test.cshtml"); + repository.AddOrUpdate(macro); + + Assert.Throws(unitOfWork.Commit); + } + + } + + [Test] + public void Cannot_Update_To_Duplicate_Macro_Alias() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + + // Act + using (var repository = new MacroRepository(unitOfWork)) + { + var macro = repository.Get(1); + macro.Alias = "test1"; + repository.AddOrUpdate(macro); + Assert.Throws(unitOfWork.Commit); + } + + } + + [Test] + public void Can_Instantiate_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + + // Act + using (var repository = new MacroRepository(unitOfWork)) + { + // Assert + Assert.That(repository, Is.Not.Null); + } + } + + [Test] + public void Can_Perform_Get_On_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + // Act + var macro = repository.Get(1); + + // Assert + Assert.That(macro, Is.Not.Null); + Assert.That(macro.HasIdentity, Is.True); + Assert.That(macro.Alias, Is.EqualTo("test1")); + Assert.That(macro.CacheByPage, Is.EqualTo(false)); + Assert.That(macro.CacheByMember, Is.EqualTo(false)); + Assert.That(macro.ControlAssembly, Is.EqualTo("MyAssembly1")); + Assert.That(macro.ControlType, Is.EqualTo("~/usercontrol/test1.ascx")); + Assert.That(macro.DontRender, Is.EqualTo(true)); + Assert.That(macro.Name, Is.EqualTo("Test1")); + Assert.That(macro.CacheDuration, Is.EqualTo(0)); + Assert.That(macro.ScriptPath, Is.EqualTo("~/views/macropartials/test1.cshtml")); + Assert.That(macro.UseInEditor, Is.EqualTo(false)); + Assert.That(macro.XsltPath, Is.EqualTo("test1.xslt")); + } + + + } + + [Test] + public void Can_Perform_GetAll_On_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + // Act + var macros = repository.GetAll(); + + // Assert + Assert.That(macros.Count(), Is.EqualTo(3)); + } + + } + + [Test] + public void Can_Perform_GetByQuery_On_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + // Act + var query = Query.Builder.Where(x => x.Alias.ToUpper() == "TEST1"); + var result = repository.GetByQuery(query); + + // Assert + Assert.AreEqual(1, result.Count()); + } + } + + [Test] + public void Can_Perform_Count_On_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + // Act + var query = Query.Builder.Where(x => x.Name.StartsWith("Test")); + int count = repository.Count(query); + + // Assert + Assert.That(count, Is.EqualTo(2)); + } + } + + [Test] + public void Can_Perform_Add_On_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + // Act + var macro = new Macro("test", "Test", "~/usercontrol/blah.ascx", "MyAssembly", "test.xslt", "~/views/macropartials/test.cshtml"); + repository.AddOrUpdate(macro); + unitOfWork.Commit(); + + // Assert + Assert.That(macro.HasIdentity, Is.True); + Assert.That(macro.Id, Is.EqualTo(4));//With 3 existing entries the Id should be 4 + } + } + + [Test] + public void Can_Perform_Update_On_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + // Act + var macro = repository.Get(2); + macro.Name = "Hello"; + macro.CacheDuration = 1234; + macro.CacheByPage = true; + macro.CacheByMember = true; + macro.ControlAssembly = ""; + macro.ControlType = ""; + macro.DontRender = false; + macro.ScriptPath = "~/newpath.cshtml"; + macro.UseInEditor = true; + macro.XsltPath = ""; + + repository.AddOrUpdate(macro); + unitOfWork.Commit(); + + var macroUpdated = repository.Get(2); + + // Assert + Assert.That(macroUpdated, Is.Not.Null); + Assert.That(macroUpdated.Name, Is.EqualTo("Hello")); + Assert.That(macroUpdated.CacheDuration, Is.EqualTo(1234)); + Assert.That(macroUpdated.CacheByPage, Is.EqualTo(true)); + Assert.That(macroUpdated.CacheByMember, Is.EqualTo(true)); + Assert.That(macroUpdated.ControlAssembly, Is.EqualTo("")); + Assert.That(macroUpdated.ControlType, Is.EqualTo("")); + Assert.That(macroUpdated.DontRender, Is.EqualTo(false)); + Assert.That(macroUpdated.ScriptPath, Is.EqualTo("~/newpath.cshtml")); + Assert.That(macroUpdated.UseInEditor, Is.EqualTo(true)); + Assert.That(macroUpdated.XsltPath, Is.EqualTo("")); + } + } + + [Test] + public void Can_Perform_Delete_On_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + // Act + var macro = repository.Get(3); + Assert.IsNotNull(macro); + repository.Delete(macro); + unitOfWork.Commit(); + + var exists = repository.Exists(3); + + // Assert + Assert.That(exists, Is.False); + } + } + + [Test] + public void Can_Perform_Exists_On_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + // Act + var exists = repository.Exists(3); + var doesntExist = repository.Exists(10); + + // Assert + Assert.That(exists, Is.True); + Assert.That(doesntExist, Is.False); + } + } + + [Test] + public void Can_Add_Property_For_Macro() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + var macro = repository.Get(1); + macro.Properties.Add(new MacroProperty("new1", "New1", 3, null)); + + repository.AddOrUpdate(macro); + + unitOfWork.Commit(); + + // Assert + var result = repository.Get(1); + Assert.AreEqual(1, result.Properties.Count()); + Assert.AreEqual("new1", result.Properties.First().Alias); + Assert.AreEqual("New1", result.Properties.First().Name); + Assert.AreEqual(3, result.Properties.First().SortOrder); + + } + } + + [Test] + public void Can_Add_New_Macro_With_Property() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + var macro = new Macro("test1", "Test1", "~/usercontrol/test1.ascx", "MyAssembly1", "test1.xslt", "~/views/macropartials/test1.cshtml"); + macro.Properties.Add(new MacroProperty("blah1", "New1", 4, null)); + + repository.AddOrUpdate(macro); + + unitOfWork.Commit(); + + // Assert + var result = repository.Get(macro.Id); + Assert.AreEqual(1, result.Properties.Count()); + Assert.AreEqual("blah1", result.Properties.First().Alias); + Assert.AreEqual("New1", result.Properties.First().Name); + Assert.AreEqual(4, result.Properties.First().SortOrder); + + } + } + + [Test] + public void Can_Remove_Macro_Property() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + var macro = new Macro("test1", "Test1", "~/usercontrol/test1.ascx", "MyAssembly1", "test1.xslt", "~/views/macropartials/test1.cshtml"); + macro.Properties.Add(new MacroProperty("blah1", "New1", 4, null)); + repository.AddOrUpdate(macro); + unitOfWork.Commit(); + + var result = repository.Get(macro.Id); + result.Properties.Remove("blah1"); + repository.AddOrUpdate(macro); + unitOfWork.Commit(); + + // Assert + result = repository.Get(macro.Id); + Assert.AreEqual(0, result.Properties.Count()); + + } + } + + [Test] + public void Can_Add_Remove_Macro_Properties() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new MacroRepository(unitOfWork)) + { + var macro = new Macro("test1", "Test1", "~/usercontrol/test1.ascx", "MyAssembly1", "test1.xslt", "~/views/macropartials/test1.cshtml"); + var prop1 = new MacroProperty("blah1", "New1", 4, null); + var prop2 = new MacroProperty("blah2", "New2", 3, null); + + //add/remove a few to test the collection observable + macro.Properties.Add(prop1); + macro.Properties.Add(prop2); + macro.Properties.Remove(prop1); + macro.Properties.Remove("blah2"); + macro.Properties.Add(prop2); + + repository.AddOrUpdate(macro); + unitOfWork.Commit(); + + // Assert + var result = repository.Get(macro.Id); + + Assert.AreEqual(1, result.Properties.Count()); + Assert.AreEqual("blah2", result.Properties.Single().Alias); + + } + } + + + + [TearDown] + public override void TearDown() + { + base.TearDown(); + } + + public void CreateTestData() + { + var provider = new PetaPocoUnitOfWorkProvider(); + using (var unitOfWork = provider.GetUnitOfWork()) + using (var repository = new MacroRepository(unitOfWork)) + { + repository.AddOrUpdate(new Macro("test1", "Test1", "~/usercontrol/test1.ascx", "MyAssembly1", "test1.xslt", "~/views/macropartials/test1.cshtml")); + repository.AddOrUpdate(new Macro("test2", "Test2", "~/usercontrol/test2.ascx", "MyAssembly2", "test2.xslt", "~/views/macropartials/test2.cshtml")); + repository.AddOrUpdate(new Macro("test3", "Tet3", "~/usercontrol/test3.ascx", "MyAssembly3", "test3.xslt", "~/views/macropartials/test3.cshtml")); + unitOfWork.Commit(); + } + + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs index 49cce1de95..ef1bda3c5c 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs @@ -10,269 +10,6 @@ using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.Persistence.Repositories { - [TestFixture] - public class MacroRepositoryTest : BaseDatabaseFactoryTest - { - [SetUp] - public override void Initialize() - { - base.Initialize(); - - CreateTestData(); - } - - [Test] - public void Cannot_Add_Duplicate_Macros() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - using (var repository = new MacroRepository(unitOfWork)) - { - var macro = new Macro("test", "Test", "~/usercontrol/blah.ascx", "MyAssembly", "test.xslt", "~/views/macropartials/test.cshtml"); - repository.AddOrUpdate(macro); - - Assert.Throws(unitOfWork.Commit); - } - - } - - [Test] - public void Cannot_Update_To_Duplicate_Macro_Alias() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - using (var repository = new MacroRepository(unitOfWork)) - { - var macro = repository.Get(1); - macro.Alias = "test1"; - repository.AddOrUpdate(macro); - Assert.Throws(unitOfWork.Commit); - } - - } - - [Test] - public void Can_Instantiate_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - using (var repository = new MacroRepository(unitOfWork)) - { - // Assert - Assert.That(repository, Is.Not.Null); - } - } - - [Test] - public void Can_Perform_Get_On_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) - { - // Act - var macro = repository.Get(1); - - // Assert - Assert.That(macro, Is.Not.Null); - Assert.That(macro.HasIdentity, Is.True); - Assert.That(macro.Alias, Is.EqualTo("test1")); - Assert.That(macro.CacheByPage, Is.EqualTo(false)); - Assert.That(macro.CacheByMember, Is.EqualTo(false)); - Assert.That(macro.ControlAssembly, Is.EqualTo("MyAssembly1")); - Assert.That(macro.ControlType, Is.EqualTo("~/usercontrol/test1.ascx")); - Assert.That(macro.DontRender, Is.EqualTo(true)); - Assert.That(macro.Name, Is.EqualTo("Test1")); - Assert.That(macro.CacheDuration, Is.EqualTo(0)); - Assert.That(macro.ScriptPath, Is.EqualTo("~/views/macropartials/test1.cshtml")); - Assert.That(macro.UseInEditor, Is.EqualTo(false)); - Assert.That(macro.XsltPath, Is.EqualTo("test1.xslt")); - } - - - } - - [Test] - public void Can_Perform_GetAll_On_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) - { - // Act - var macros = repository.GetAll(); - - // Assert - Assert.That(macros.Count(), Is.EqualTo(3)); - } - - } - - [Test] - public void Can_Perform_GetByQuery_On_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) - { - // Act - var query = Query.Builder.Where(x => x.Alias.ToUpper() == "TEST1"); - var result = repository.GetByQuery(query); - - // Assert - Assert.AreEqual(1, result.Count()); - } - } - - [Test] - public void Can_Perform_Count_On_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) - { - // Act - var query = Query.Builder.Where(x => x.Name.StartsWith("Test")); - int count = repository.Count(query); - - // Assert - Assert.That(count, Is.EqualTo(2)); - } - } - - [Test] - public void Can_Perform_Add_On_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) - { - // Act - var macro = new Macro("test", "Test", "~/usercontrol/blah.ascx", "MyAssembly", "test.xslt", "~/views/macropartials/test.cshtml"); - repository.AddOrUpdate(macro); - unitOfWork.Commit(); - - // Assert - Assert.That(macro.HasIdentity, Is.True); - Assert.That(macro.Id, Is.EqualTo(4));//With 3 existing entries the Id should be 4 - } - } - - [Test] - public void Can_Perform_Update_On_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) - { - // Act - var macro = repository.Get(2); - macro.Name = "Hello"; - macro.CacheDuration = 1234; - macro.CacheByPage = true; - macro.CacheByMember = true; - macro.ControlAssembly = ""; - macro.ControlType = ""; - macro.DontRender = false; - macro.ScriptPath = "~/newpath.cshtml"; - macro.UseInEditor = true; - macro.XsltPath = ""; - - repository.AddOrUpdate(macro); - unitOfWork.Commit(); - - var macroUpdated = repository.Get(2); - - // Assert - Assert.That(macroUpdated, Is.Not.Null); - Assert.That(macroUpdated.Name, Is.EqualTo("Hello")); - Assert.That(macroUpdated.CacheDuration, Is.EqualTo(1234)); - Assert.That(macroUpdated.CacheByPage, Is.EqualTo(true)); - Assert.That(macroUpdated.CacheByMember, Is.EqualTo(true)); - Assert.That(macroUpdated.ControlAssembly, Is.EqualTo("")); - Assert.That(macroUpdated.ControlType, Is.EqualTo("")); - Assert.That(macroUpdated.DontRender, Is.EqualTo(false)); - Assert.That(macroUpdated.ScriptPath, Is.EqualTo("~/newpath.cshtml")); - Assert.That(macroUpdated.UseInEditor, Is.EqualTo(true)); - Assert.That(macroUpdated.XsltPath, Is.EqualTo("")); - } - } - - [Test] - public void Can_Perform_Delete_On_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) - { - // Act - var macro = repository.Get(3); - Assert.IsNotNull(macro); - repository.Delete(macro); - unitOfWork.Commit(); - - var exists = repository.Exists(3); - - // Assert - Assert.That(exists, Is.False); - } - } - - [Test] - public void Can_Perform_Exists_On_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) - { - // Act - var exists = repository.Exists(3); - var doesntExist = repository.Exists(10); - - // Assert - Assert.That(exists, Is.True); - Assert.That(doesntExist, Is.False); - } - } - - [TearDown] - public override void TearDown() - { - base.TearDown(); - } - - public void CreateTestData() - { - var provider = new PetaPocoUnitOfWorkProvider(); - using (var unitOfWork = provider.GetUnitOfWork()) - using (var repository = new MacroRepository(unitOfWork)) - { - repository.AddOrUpdate(new Macro("test1", "Test1", "~/usercontrol/test1.ascx", "MyAssembly1", "test1.xslt", "~/views/macropartials/test1.cshtml")); - repository.AddOrUpdate(new Macro("test2", "Test2", "~/usercontrol/test2.ascx", "MyAssembly2", "test2.xslt", "~/views/macropartials/test2.cshtml")); - repository.AddOrUpdate(new Macro("test3", "Tet3", "~/usercontrol/test3.ascx", "MyAssembly3", "test3.xslt", "~/views/macropartials/test3.cshtml")); - unitOfWork.Commit(); - } - - } - } - [TestFixture] public class ServerRegistrationRepositoryTest : BaseDatabaseFactoryTest { diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 66d91c0129..2f04d7b0c3 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -246,6 +246,7 @@ +