diff --git a/src/Umbraco.Core/Persistence/Repositories/ScriptRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ScriptRepository.cs index b306ef2c01..dba1db3b53 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ScriptRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ScriptRepository.cs @@ -28,11 +28,14 @@ namespace Umbraco.Core.Persistence.Repositories throw new Exception(string.Format("The file {0} was not found", id)); } - var stream = FileSystem.OpenFile(id); - byte[] bytes = new byte[stream.Length]; - stream.Position = 0; - stream.Read(bytes, 0, (int)stream.Length); - var content = Encoding.UTF8.GetString(bytes); + string content = string.Empty; + using (var stream = FileSystem.OpenFile(id)) + { + byte[] bytes = new byte[stream.Length]; + stream.Position = 0; + stream.Read(bytes, 0, (int)stream.Length); + content = Encoding.UTF8.GetString(bytes); + } var path = FileSystem.GetRelativePath(id); var created = FileSystem.GetCreated(path).UtcDateTime; diff --git a/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs b/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs index c39aa0d104..f9dc30e0ff 100644 --- a/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs @@ -28,11 +28,15 @@ namespace Umbraco.Core.Persistence.Repositories throw new Exception(string.Format("The file {0} was not found", id)); } - var stream = FileSystem.OpenFile(id); - byte[] bytes = new byte[stream.Length]; - stream.Position = 0; - stream.Read(bytes, 0, (int)stream.Length); - var content = Encoding.UTF8.GetString(bytes); + var content = string.Empty; + + using (var stream = FileSystem.OpenFile(id)) + { + byte[] bytes = new byte[stream.Length]; + stream.Position = 0; + stream.Read(bytes, 0, (int) stream.Length); + content = Encoding.UTF8.GetString(bytes); + } var path = FileSystem.GetRelativePath(id); var created = FileSystem.GetCreated(path).UtcDateTime; diff --git a/src/Umbraco.Tests/App.config b/src/Umbraco.Tests/App.config index 6dbed2f883..b3aabc2647 100644 --- a/src/Umbraco.Tests/App.config +++ b/src/Umbraco.Tests/App.config @@ -43,7 +43,7 @@ - + diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs new file mode 100644 index 0000000000..3069196cd9 --- /dev/null +++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs @@ -0,0 +1,205 @@ +using System.IO; +using System.Linq; +using System.Text; +using NUnit.Framework; +using Umbraco.Core.IO; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence.Repositories; +using Umbraco.Core.Persistence.UnitOfWork; + +namespace Umbraco.Tests.Persistence.Repositories +{ + [TestFixture] + public class ScriptRepositoryTest + { + private IFileSystem _fileSystem; + + [SetUp] + public void Initialize() + { + _fileSystem = FileSystemProviderManager.Current.GetFileSystemProvider("scripts"); + var stream = CreateStream("Umbraco.Sys.registerNamespace(\"Umbraco.Utils\");"); + _fileSystem.AddFile("test-script.js", stream); + } + + [Test] + public void Can_Instantiate_Repository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + + // Act + var repository = new ScriptRepository(unitOfWork); + + // Assert + Assert.That(repository, Is.Not.Null); + } + + [Test] + public void Can_Perform_Add_On_ScriptRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new ScriptRepository(unitOfWork); + + // Act + var script = new Script("test-add-script.js") {Content = "/// "}; + repository.AddOrUpdate(script); + unitOfWork.Commit(); + + //Assert + Assert.That(_fileSystem.FileExists("test-add-script.js"), Is.True); + } + + [Test] + public void Can_Perform_Update_On_ScriptRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new ScriptRepository(unitOfWork); + + // Act + var script = new Script("test-updated-script.js") { Content = "/// " }; + repository.AddOrUpdate(script); + unitOfWork.Commit(); + + script.Content = "/// "; + repository.AddOrUpdate(script); + unitOfWork.Commit(); + + var scriptUpdated = repository.Get("test-updated-script.js"); + + // Assert + Assert.That(_fileSystem.FileExists("test-updated-script.js"), Is.True); + Assert.That(scriptUpdated.Content, Is.EqualTo("/// ")); + } + + [Test] + public void Can_Perform_Delete_On_ScriptRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new ScriptRepository(unitOfWork); + + // Act + var script = repository.Get("test-script.js"); + repository.Delete(script); + unitOfWork.Commit(); + + // Assert + + } + + [Test] + public void Can_Perform_Get_On_ScriptRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new ScriptRepository(unitOfWork); + + // Act + var exists = repository.Get("test-script.js"); + + // Assert + Assert.That(exists, Is.Not.Null); + Assert.That(exists.Alias, Is.EqualTo("test-script")); + Assert.That(exists.Name, Is.EqualTo("test-script.js")); + } + + [Test] + public void Can_Perform_GetAll_On_ScriptRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new ScriptRepository(unitOfWork); + + var script = new Script("test-script1.js") { Content = "/// " }; + repository.AddOrUpdate(script); + var script2 = new Script("test-script2.js") { Content = "/// " }; + repository.AddOrUpdate(script2); + var script3 = new Script("test-script3.js") { Content = "/// " }; + repository.AddOrUpdate(script3); + unitOfWork.Commit(); + + // Act + var scripts = repository.GetAll(); + + // Assert + Assert.That(scripts, Is.Not.Null); + Assert.That(scripts.Any(), Is.True); + Assert.That(scripts.Any(x => x == null), Is.False); + Assert.That(scripts.Count(), Is.EqualTo(4)); + } + + [Test] + public void Can_Perform_GetAll_With_Params_On_ScriptRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new ScriptRepository(unitOfWork); + + var script = new Script("test-script1.js") { Content = "/// " }; + repository.AddOrUpdate(script); + var script2 = new Script("test-script2.js") { Content = "/// " }; + repository.AddOrUpdate(script2); + var script3 = new Script("test-script3.js") { Content = "/// " }; + repository.AddOrUpdate(script3); + unitOfWork.Commit(); + + // Act + var scripts = repository.GetAll("test-script1.js", "test-script2.js"); + + // Assert + Assert.That(scripts, Is.Not.Null); + Assert.That(scripts.Any(), Is.True); + Assert.That(scripts.Any(x => x == null), Is.False); + Assert.That(scripts.Count(), Is.EqualTo(2)); + } + + [Test] + public void Can_Perform_Exists_On_ScriptRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new ScriptRepository(unitOfWork); + + // Act + var exists = repository.Exists("test-script.js"); + + // Assert + Assert.That(exists, Is.True); + } + + [TearDown] + public void TearDown() + { + _fileSystem = null; + //Delete all files + var fs = FileSystemProviderManager.Current.GetFileSystemProvider("scripts"); + var files = fs.GetFiles("", "*.js"); + foreach (var file in files) + { + fs.DeleteFile(file); + } + } + + protected Stream CreateStream(string contents = null) + { + if (string.IsNullOrEmpty(contents)) + contents = "/* test */"; + + var bytes = Encoding.UTF8.GetBytes(contents); + var stream = new MemoryStream(bytes); + + return stream; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs new file mode 100644 index 0000000000..0b18cb253f --- /dev/null +++ b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs @@ -0,0 +1,202 @@ +using System.IO; +using System.Linq; +using System.Text; +using NUnit.Framework; +using Umbraco.Core.IO; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence.Repositories; +using Umbraco.Core.Persistence.UnitOfWork; + +namespace Umbraco.Tests.Persistence.Repositories +{ + [TestFixture] + public class StylesheetRepositoryTest + { + private IFileSystem _fileSystem; + + [SetUp] + public void Initialize() + { + _fileSystem = FileSystemProviderManager.Current.GetFileSystemProvider("stylesheets"); + var stream = CreateStream("body {background:#EE7600; color:#FFF;}"); + _fileSystem.AddFile("styles.css", stream); + } + + [Test] + public void Can_Instantiate_Repository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + + // Act + var repository = new StylesheetRepository(unitOfWork); + + // Assert + Assert.That(repository, Is.Not.Null); + } + + [Test] + public void Can_Perform_Add_On_StylesheetRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new StylesheetRepository(unitOfWork); + + // Act + var stylesheet = new Stylesheet("test-add.css") { Content = "body { color:#000; } .bold {font-weight:bold;}" }; + repository.AddOrUpdate(stylesheet); + unitOfWork.Commit(); + + //Assert + Assert.That(_fileSystem.FileExists("test-add.css"), Is.True); + } + + [Test] + public void Can_Perform_Update_On_StylesheetRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new StylesheetRepository(unitOfWork); + + // Act + var stylesheet = new Stylesheet("test-update.css") { Content = "body { color:#000; } .bold {font-weight:bold;}" }; + repository.AddOrUpdate(stylesheet); + unitOfWork.Commit(); + + var stylesheetUpdate = repository.Get("test-update.css"); + stylesheetUpdate.Content = "body { color:#000; }"; + repository.AddOrUpdate(stylesheetUpdate); + unitOfWork.Commit(); + + var stylesheetUpdated = repository.Get("test-update.css"); + + //Assert + Assert.That(stylesheetUpdated, Is.Not.Null); + Assert.That(stylesheetUpdated.HasIdentity, Is.True); + Assert.That(stylesheetUpdated.Content, Is.EqualTo("body { color:#000; }")); + } + + [Test] + public void Can_Perform_Delete_On_StylesheetRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new StylesheetRepository(unitOfWork); + + // Act + var stylesheet = new Stylesheet("test-delete.css") { Content = "body { color:#000; } .bold {font-weight:bold;}" }; + repository.AddOrUpdate(stylesheet); + unitOfWork.Commit(); + + repository.Delete(stylesheet); + unitOfWork.Commit(); + + //Assert + Assert.That(_fileSystem.FileExists("test-delete.css"), Is.False); + } + + [Test] + public void Can_Perform_Get_On_StylesheetRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new StylesheetRepository(unitOfWork); + + // Act + var stylesheet = repository.Get("styles.css"); + + // Assert + Assert.That(stylesheet, Is.Not.Null); + Assert.That(stylesheet.HasIdentity, Is.True); + Assert.That(stylesheet.Content, Is.EqualTo("body {background:#EE7600; color:#FFF;}")); + Assert.That(stylesheet.IsFileValidCss(), Is.True); + } + + [Test] + public void Can_Perform_GetAll_On_StylesheetRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new StylesheetRepository(unitOfWork); + + var stylesheet = new Stylesheet("styles-v2.css") { Content = "body { color:#000; } .bold {font-weight:bold;}" }; + repository.AddOrUpdate(stylesheet); + unitOfWork.Commit(); + + // Act + var stylesheets = repository.GetAll(); + + // Assert + Assert.That(stylesheets, Is.Not.Null); + Assert.That(stylesheets.Any(), Is.True); + Assert.That(stylesheets.Any(x => x == null), Is.False); + Assert.That(stylesheets.Count(), Is.EqualTo(2)); + } + + [Test] + public void Can_Perform_GetAll_With_Params_On_StylesheetRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new StylesheetRepository(unitOfWork); + + var stylesheet = new Stylesheet("styles-v2.css") { Content = "body { color:#000; } .bold {font-weight:bold;}" }; + repository.AddOrUpdate(stylesheet); + unitOfWork.Commit(); + + // Act + var stylesheets = repository.GetAll("styles-v2.css", "styles.css"); + + // Assert + Assert.That(stylesheets, Is.Not.Null); + Assert.That(stylesheets.Any(), Is.True); + Assert.That(stylesheets.Any(x => x == null), Is.False); + Assert.That(stylesheets.Count(), Is.EqualTo(2)); + } + + [Test] + public void Can_Perform_Exists_On_StylesheetRepository() + { + // Arrange + var provider = new FileUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new StylesheetRepository(unitOfWork); + + // Act + var exists = repository.Exists("styles.css"); + + // Assert + Assert.That(exists, Is.True); + } + + [TearDown] + public void TearDown() + { + //Delete all files + var files = _fileSystem.GetFiles("", "*.css"); + foreach (var file in files) + { + _fileSystem.DeleteFile(file); + } + _fileSystem = null; + } + + protected Stream CreateStream(string contents = null) + { + if (string.IsNullOrEmpty(contents)) + contents = "/* test */"; + + var bytes = Encoding.UTF8.GetBytes(contents); + var stream = new MemoryStream(bytes); + + return stream; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index dcc531f1c2..0aac203bd3 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -126,6 +126,8 @@ + +