From 75c913cceda3db460a77aaf09a2655baf4cfba21 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 17 Sep 2013 20:19:27 +1000 Subject: [PATCH] Updated macro repo and services and ensures correct data joins --- .../Relators/MacroPropertyRelator.cs | 47 +++++++++++ .../Interfaces/IMacroRepository.cs | 7 +- .../Repositories/MacroRepository.cs | 73 ++++++++++++----- .../Persistence/RepositoryFactory.cs | 5 ++ src/Umbraco.Core/Services/IMacroService.cs | 26 +++--- src/Umbraco.Core/Services/MacroService.cs | 82 +++++++++---------- src/Umbraco.Core/Services/ServiceContext.cs | 12 +++ src/Umbraco.Core/Umbraco.Core.csproj | 3 + .../Repositories/MacroRepositoryTest.cs | 33 ++++---- .../Services/RepositoryServiceTests.cs | 82 +++++++++++++++++++ src/Umbraco.Tests/Umbraco.Tests.csproj | 1 + 11 files changed, 276 insertions(+), 95 deletions(-) create mode 100644 src/Umbraco.Core/Persistence/Relators/MacroPropertyRelator.cs create mode 100644 src/Umbraco.Tests/Services/RepositoryServiceTests.cs diff --git a/src/Umbraco.Core/Persistence/Relators/MacroPropertyRelator.cs b/src/Umbraco.Core/Persistence/Relators/MacroPropertyRelator.cs new file mode 100644 index 0000000000..39190a69f9 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Relators/MacroPropertyRelator.cs @@ -0,0 +1,47 @@ +using System.Collections.Generic; +using Umbraco.Core.Models.Rdbms; + +namespace Umbraco.Core.Persistence.Relators +{ + internal class MacroPropertyRelator + { + internal MacroDto Current; + + internal MacroDto Map(MacroDto a, MacroPropertyDto p) + { + // Terminating call. Since we can return null from this function + // we need to be ready for PetaPoco to callback later with null + // parameters + if (a == null) + return Current; + + // Is this the same DictionaryItem as the current one we're processing + if (Current != null && Current.Id == a.Id) + { + // Yes, just add this MacroPropertyDtos to the current item's collection + Current.MacroPropertyDtos.Add(p); + + // Return null to indicate we're not done with this Macro yet + return null; + } + + // This is a different Macro to the current one, or this is the + // first time through and we don't have one yet + + // Save the current Macro + var prev = Current; + + // Setup the new current Macro + Current = a; + Current.MacroPropertyDtos = new List(); + //this can be null since we are doing a left join + if (p.Alias != null) + { + Current.MacroPropertyDtos.Add(p); + } + + // Return the now populated previous Macro (or null if first time through) + return prev; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMacroRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMacroRepository.cs index 7dab5eefe6..b800728e67 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMacroRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMacroRepository.cs @@ -1,9 +1,12 @@ -using Umbraco.Core.Models; +using System.Collections.Generic; +using Umbraco.Core.Models; namespace Umbraco.Core.Persistence.Repositories { internal interface IMacroRepository : IRepositoryQueryable { - + + //IEnumerable GetAll(params string[] aliases); + } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs index 3aa0ea07f3..e604ea2cc5 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs @@ -7,6 +7,7 @@ using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Factories; using Umbraco.Core.Persistence.Querying; +using Umbraco.Core.Persistence.Relators; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Persistence.UnitOfWork; @@ -27,7 +28,7 @@ namespace Umbraco.Core.Persistence.Repositories var sql = GetBaseQuery(false); sql.Where(GetBaseWhereClause(), new { Id = id }); - var macroDto = Database.First(sql); + var macroDto = Database.Fetch(new MacroPropertyRelator().Map, sql).FirstOrDefault(); if (macroDto == null) return null; @@ -45,18 +46,33 @@ namespace Umbraco.Core.Persistence.Repositories { if (ids.Any()) { - foreach (var id in ids) - { - yield return Get(id); - } + return PerformGetAllOnIds(ids); } - else + + var sql = GetBaseQuery(false); + + return ConvertFromDtos(Database.Fetch(new MacroPropertyRelator().Map, sql)); + } + + private IEnumerable PerformGetAllOnIds(params int[] ids) + { + if (ids.Any() == false) yield break; + foreach (var id in ids) { - var macroDtos = Database.Fetch("WHERE id > 0"); - foreach (var macroDto in macroDtos) - { - yield return Get(macroDto.Id); - } + yield return Get(id); + } + } + + private IEnumerable ConvertFromDtos(IEnumerable dtos) + { + var factory = new MacroFactory(); + foreach (var entity in dtos.Select(factory.BuildEntity)) + { + //on initial construction we don't want to have dirty properties tracked + // http://issues.umbraco.org/issue/U4-1946 + ((TracksChangesEntityBase)entity).ResetDirtyProperties(false); + + yield return entity; } } @@ -66,7 +82,7 @@ namespace Umbraco.Core.Persistence.Repositories var translator = new SqlTranslator(sqlClause, query); var sql = translator.Translate(); - var dtos = Database.Fetch(sql); + var dtos = Database.Fetch(new MacroPropertyRelator().Map, sql); foreach (var dto in dtos) { @@ -83,24 +99,24 @@ namespace Umbraco.Core.Persistence.Repositories } else { - return GetBaseQuery("*"); + return GetBaseQuery(); } return sql; } - private static Sql GetBaseQuery(string columns) + private static Sql GetBaseQuery() { var sql = new Sql(); - sql.Select(columns) - .From() - .LeftJoin() - .On(left => left.Id, right => right.Macro); + sql.Select("*") + .From() + .LeftJoin() + .On(left => left.Id, right => right.Macro); return sql; } protected override string GetBaseWhereClause() { - return "id = @Id"; + return "cmsMacro.id = @Id"; } protected override IEnumerable GetDeleteClauses() @@ -175,5 +191,24 @@ namespace Umbraco.Core.Persistence.Repositories ((ICanBeDirty)entity).ResetDirtyProperties(); } + + //public IEnumerable GetAll(params string[] aliases) + //{ + // if (aliases.Any()) + // { + // var q = new Query(); + // foreach (var alias in aliases) + // { + // q.Where(macro => macro.Alias == alias); + // } + + // var wheres = string.Join(" OR ", q.WhereClauses()); + // } + // else + // { + // return GetAll(new int[] {}); + // } + + //} } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/RepositoryFactory.cs b/src/Umbraco.Core/Persistence/RepositoryFactory.cs index 3e406de46a..37791e35d1 100644 --- a/src/Umbraco.Core/Persistence/RepositoryFactory.cs +++ b/src/Umbraco.Core/Persistence/RepositoryFactory.cs @@ -130,6 +130,11 @@ namespace Umbraco.Core.Persistence CreateUserTypeRepository(uow)); } + internal virtual IMacroRepository CreateMacroRepository(IDatabaseUnitOfWork uow) + { + return new MacroRepository(uow, RuntimeCacheProvider.Current); + } + internal virtual IMemberRepository CreateMemberRepository(IDatabaseUnitOfWork uow) { return new MemberRepository(uow, RuntimeCacheProvider.Current, CreateMemberTypeRepository(uow)); diff --git a/src/Umbraco.Core/Services/IMacroService.cs b/src/Umbraco.Core/Services/IMacroService.cs index d2477a061e..0c59b8a614 100644 --- a/src/Umbraco.Core/Services/IMacroService.cs +++ b/src/Umbraco.Core/Services/IMacroService.cs @@ -4,12 +4,10 @@ using Umbraco.Core.Models; namespace Umbraco.Core.Services { /// - /// Defines the ContentService, which is an easy access to operations involving + /// Defines the MacroService, 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 /// @@ -38,17 +36,17 @@ namespace Umbraco.Core.Services /// 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 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); + ///// + ///// 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 index 7d1f9e89c4..a620bbc0ab 100644 --- a/src/Umbraco.Core/Services/MacroService.cs +++ b/src/Umbraco.Core/Services/MacroService.cs @@ -5,6 +5,7 @@ using Umbraco.Core.Auditing; using Umbraco.Core.Events; using Umbraco.Core.Models; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Services @@ -15,44 +16,24 @@ namespace Umbraco.Core.Services internal class MacroService : IMacroService { private readonly RepositoryFactory _repositoryFactory; - private readonly IUnitOfWorkProvider _uowProvider; + private readonly IDatabaseUnitOfWorkProvider _uowProvider; public MacroService() - : this(new RepositoryFactory()) + : this(new PetaPocoUnitOfWorkProvider(), new RepositoryFactory()) { } - - public MacroService(RepositoryFactory repositoryFactory) - : this(new FileUnitOfWorkProvider(), repositoryFactory) - { - } - - public MacroService(IUnitOfWorkProvider provider) + + public MacroService(IDatabaseUnitOfWorkProvider provider) : this(provider, new RepositoryFactory()) { } - public MacroService(IUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) : this(provider, repositoryFactory, false) - { - } - - public MacroService(IUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, bool ensureCachedMacros) + public MacroService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) { _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 @@ -63,7 +44,9 @@ namespace Umbraco.Core.Services { using (var repository = _repositoryFactory.CreateMacroRepository(_uowProvider.GetUnitOfWork())) { - return repository.Get(alias); + var q = new Query(); + q.Where(macro => macro.Alias == alias); + return repository.GetByQuery(q).FirstOrDefault(); } } @@ -76,7 +59,18 @@ namespace Umbraco.Core.Services { using (var repository = _repositoryFactory.CreateMacroRepository(_uowProvider.GetUnitOfWork())) { - return repository.GetAll(aliases); + if (aliases.Any()) + { + var q = new Query(); + foreach (var alias in aliases) + { + q.Where(macro => macro.Alias == alias); + } + + return repository.GetByQuery(q); + } + + return repository.GetAll(); } } @@ -124,24 +118,24 @@ namespace Umbraco.Core.Services 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 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); - } + ///// + ///// 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 /// diff --git a/src/Umbraco.Core/Services/ServiceContext.cs b/src/Umbraco.Core/Services/ServiceContext.cs index 89bb6955bd..dba3ef1cec 100644 --- a/src/Umbraco.Core/Services/ServiceContext.cs +++ b/src/Umbraco.Core/Services/ServiceContext.cs @@ -26,6 +26,7 @@ namespace Umbraco.Core.Services private Lazy _relationService; private Lazy _treeService; private Lazy _sectionService; + private Lazy _macroService; /// /// Constructor @@ -95,6 +96,9 @@ namespace Umbraco.Core.Services if (_sectionService == null) _sectionService = new Lazy(() => new SectionService(_userService.Value, _treeService.Value, cache)); + + if (_macroService == null) + _macroService = new Lazy(() => new MacroService(provider, repositoryFactory.Value)); } /// @@ -105,6 +109,14 @@ namespace Umbraco.Core.Services get { return _serverRegistrationService.Value; } } + /// + /// Gets the + /// + internal MacroService MacroService + { + get { return _macroService.Value; } + } + /// /// Gets the /// diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 2a85bcaf13..be2b9940db 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -407,6 +407,7 @@ + @@ -877,12 +878,14 @@ + + diff --git a/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs index 0b45c4de64..8b3bba7b4a 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs @@ -3,6 +3,7 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -29,7 +30,7 @@ namespace Umbraco.Tests.Persistence.Repositories var unitOfWork = provider.GetUnitOfWork(); // Act - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { var macro = new Macro("test", "Test", "~/usercontrol/blah.ascx", "MyAssembly", "test.xslt", "~/views/macropartials/test.cshtml"); repository.AddOrUpdate(macro); @@ -47,7 +48,7 @@ namespace Umbraco.Tests.Persistence.Repositories var unitOfWork = provider.GetUnitOfWork(); // Act - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { var macro = repository.Get(1); macro.Alias = "test1"; @@ -65,7 +66,7 @@ namespace Umbraco.Tests.Persistence.Repositories var unitOfWork = provider.GetUnitOfWork(); // Act - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { // Assert Assert.That(repository, Is.Not.Null); @@ -78,7 +79,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { // Act var macro = repository.Get(1); @@ -108,7 +109,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { // Act var macros = repository.GetAll(); @@ -125,7 +126,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { // Act var query = Query.Builder.Where(x => x.Alias.ToUpper() == "TEST1"); @@ -142,7 +143,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { // Act var query = Query.Builder.Where(x => x.Name.StartsWith("Test")); @@ -159,7 +160,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { // Act var macro = new Macro("test", "Test", "~/usercontrol/blah.ascx", "MyAssembly", "test.xslt", "~/views/macropartials/test.cshtml"); @@ -178,7 +179,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { // Act var macro = repository.Get(2); @@ -219,7 +220,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { // Act var macro = repository.Get(3); @@ -240,7 +241,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { // Act var exists = repository.Exists(3); @@ -258,7 +259,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { var macro = repository.Get(1); macro.Properties.Add(new MacroProperty("new1", "New1", 3, null)); @@ -283,7 +284,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { 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)); @@ -308,7 +309,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { 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)); @@ -317,7 +318,7 @@ namespace Umbraco.Tests.Persistence.Repositories var result = repository.Get(macro.Id); result.Properties.Remove("blah1"); - repository.AddOrUpdate(macro); + repository.AddOrUpdate(result); unitOfWork.Commit(); // Assert @@ -333,7 +334,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new MacroRepository(unitOfWork)) + using (var repository = new MacroRepository(unitOfWork, NullCacheProvider.Current)) { var macro = new Macro("test1", "Test1", "~/usercontrol/test1.ascx", "MyAssembly1", "test1.xslt", "~/views/macropartials/test1.cshtml"); var prop1 = new MacroProperty("blah1", "New1", 4, null); diff --git a/src/Umbraco.Tests/Services/RepositoryServiceTests.cs b/src/Umbraco.Tests/Services/RepositoryServiceTests.cs new file mode 100644 index 0000000000..851dcd2d8d --- /dev/null +++ b/src/Umbraco.Tests/Services/RepositoryServiceTests.cs @@ -0,0 +1,82 @@ +using System.Linq; +using NUnit.Framework; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence.Repositories; +using Umbraco.Core.Persistence.UnitOfWork; + +namespace Umbraco.Tests.Services +{ + [TestFixture, RequiresSTA] + public class RepositoryServiceTests : BaseServiceTest + { + [SetUp] + public override void Initialize() + { + base.Initialize(); + + CreateTestData(); + } + + public override void CreateTestData() + { + base.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(); + } + } + + [TearDown] + public override void TearDown() + { + base.TearDown(); + } + + [Test] + public void Can_Get_By_Alias() + { + // Arrange + var macroService = ServiceContext.MacroService; + + // Act + var macro = macroService.GetByAlias("test1"); + + //assert + Assert.IsNotNull(macro); + Assert.AreEqual("Test1", macro.Name); + } + + [Test] + public void Can_Get_All() + { + // Arrange + var macroService = ServiceContext.MacroService; + + // Act + var result = macroService.GetAll(); + + //assert + Assert.AreEqual(3, result.Count()); + } + + [Test] + public void Can_Get_Many_By_Alias() + { + // Arrange + var macroService = ServiceContext.MacroService; + + // Act + var result = macroService.GetAll("test1", "test2"); + + //assert + Assert.AreEqual(2, result.Count()); + } + + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 2f04d7b0c3..c0b9c20955 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -266,6 +266,7 @@ +