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 @@
+
+