diff --git a/Test.GBase/DataHandling/XmlDataHandlerTest.cs b/Test.GBase/DataHandling/XmlDataHandlerTest.cs new file mode 100644 index 0000000..727d272 --- /dev/null +++ b/Test.GBase/DataHandling/XmlDataHandlerTest.cs @@ -0,0 +1,241 @@ +// Author: Gockner, Simon +// Created: 2020-02-12 +// Copyright(c) 2020 SimonG. All Rights Reserved. + +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using GBase.DataHandling; +using GBase.Interfaces.DataHandling.Xml; +using GBase.Interfaces.DataHandling.Xml.Cache; +using GBase.Interfaces.DataHandling.Xml.Cache.Factories; +using GBase.Interfaces.DataHandling.Xml.Factories; +using Moq; +using NUnit.Framework; + +namespace Test.GBase.DataHandling +{ + [TestFixture] + public class XmlDataHandlerTest + { + [Test] + public async Task TestInit() + { + Mock xmlDataReaderMock = new Mock(); + xmlDataReaderMock.Setup(r => r.Init(It.IsAny())).ReturnsAsync(true); + + Mock xmlDataReaderFactoryMock = new Mock(); + xmlDataReaderFactoryMock.Setup(r => r.Create(It.IsAny())).Returns(xmlDataReaderMock.Object); + + Mock xmlDataWriterMock = new Mock(); + xmlDataWriterMock.Setup(w => w.Init(It.IsAny())).ReturnsAsync(true); + + Mock xmlDataWriterFactoryMock = new Mock(); + xmlDataWriterFactoryMock.Setup(w => w.Create(It.IsAny(), It.IsAny())).Returns(xmlDataWriterMock.Object); + + Mock xmlDataHandlerCacheMock = new Mock(); + Mock xmlDataHandlerCacheFactoryMock = new Mock(); + xmlDataHandlerCacheFactoryMock.Setup(c => c.Create(It.IsAny())).Returns(xmlDataHandlerCacheMock.Object); + + XmlDataHandler xmlDataHandler = new XmlDataHandler("path", "root", xmlDataReaderFactoryMock.Object, + xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); + + Assert.True(await xmlDataHandler.Init(false, CancellationToken.None)); + } + + [Test] + public async Task TestInitFailedTriedTwice() + { + Mock xmlDataReaderMock = new Mock(); + xmlDataReaderMock.Setup(r => r.Init(It.IsAny())).ReturnsAsync(true); + + Mock xmlDataReaderFactoryMock = new Mock(); + xmlDataReaderFactoryMock.Setup(r => r.Create(It.IsAny())).Returns(xmlDataReaderMock.Object); + + Mock xmlDataWriterMock = new Mock(); + xmlDataWriterMock.Setup(w => w.Init(It.IsAny())).ReturnsAsync(true); + + Mock xmlDataWriterFactoryMock = new Mock(); + xmlDataWriterFactoryMock.Setup(w => w.Create(It.IsAny(), It.IsAny())).Returns(xmlDataWriterMock.Object); + + Mock xmlDataHandlerCacheMock = new Mock(); + Mock xmlDataHandlerCacheFactoryMock = new Mock(); + xmlDataHandlerCacheFactoryMock.Setup(c => c.Create(It.IsAny())).Returns(xmlDataHandlerCacheMock.Object); + + XmlDataHandler xmlDataHandler = new XmlDataHandler("path", "root", xmlDataReaderFactoryMock.Object, + xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); + + Assert.True(await xmlDataHandler.Init(false, CancellationToken.None)); + Assert.False(await xmlDataHandler.Init(false, CancellationToken.None)); + } + + [Test] + public async Task TestInitFailedInitReaderFailed() + { + Mock xmlDataReaderMock = new Mock(); + xmlDataReaderMock.Setup(r => r.Init(It.IsAny())).ReturnsAsync(false); + + Mock xmlDataReaderFactoryMock = new Mock(); + xmlDataReaderFactoryMock.Setup(r => r.Create(It.IsAny())).Returns(xmlDataReaderMock.Object); + + Mock xmlDataWriterMock = new Mock(); + xmlDataWriterMock.Setup(w => w.Init(It.IsAny())).ReturnsAsync(true); + + Mock xmlDataWriterFactoryMock = new Mock(); + xmlDataWriterFactoryMock.Setup(w => w.Create(It.IsAny(), It.IsAny())).Returns(xmlDataWriterMock.Object); + + Mock xmlDataHandlerCacheMock = new Mock(); + Mock xmlDataHandlerCacheFactoryMock = new Mock(); + xmlDataHandlerCacheFactoryMock.Setup(c => c.Create(It.IsAny())).Returns(xmlDataHandlerCacheMock.Object); + + XmlDataHandler xmlDataHandler = new XmlDataHandler("path", "root", xmlDataReaderFactoryMock.Object, + xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); + + Assert.False(await xmlDataHandler.Init(false, CancellationToken.None)); + } + + [Test] + public async Task TestInitFailedInitWriterFailed() + { + Mock xmlDataReaderMock = new Mock(); + xmlDataReaderMock.Setup(r => r.Init(It.IsAny())).ReturnsAsync(true); + + Mock xmlDataReaderFactoryMock = new Mock(); + xmlDataReaderFactoryMock.Setup(r => r.Create(It.IsAny())).Returns(xmlDataReaderMock.Object); + + Mock xmlDataWriterMock = new Mock(); + xmlDataWriterMock.Setup(w => w.Init(It.IsAny())).ReturnsAsync(false); + + Mock xmlDataWriterFactoryMock = new Mock(); + xmlDataWriterFactoryMock.Setup(w => w.Create(It.IsAny(), It.IsAny())).Returns(xmlDataWriterMock.Object); + + Mock xmlDataHandlerCacheMock = new Mock(); + Mock xmlDataHandlerCacheFactoryMock = new Mock(); + xmlDataHandlerCacheFactoryMock.Setup(c => c.Create(It.IsAny())).Returns(xmlDataHandlerCacheMock.Object); + + XmlDataHandler xmlDataHandler = new XmlDataHandler("path", "root", xmlDataReaderFactoryMock.Object, + xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); + + Assert.False(await xmlDataHandler.Init(false, CancellationToken.None)); + } + + [Test] + public async Task TestSetValue() + { + Mock xmlDataReaderMock = new Mock(); + Mock xmlDataReaderFactoryMock = new Mock(); + xmlDataReaderFactoryMock.Setup(r => r.Create(It.IsAny())).Returns(xmlDataReaderMock.Object); + + Mock xmlDataWriterMock = new Mock(); + Mock xmlDataWriterFactoryMock = new Mock(); + xmlDataWriterFactoryMock.Setup(w => w.Create(It.IsAny(), It.IsAny())).Returns(xmlDataWriterMock.Object); + + Mock xmlDataHandlerCacheMock = new Mock(); + Mock xmlDataHandlerCacheFactoryMock = new Mock(); + xmlDataHandlerCacheFactoryMock.Setup(c => c.Create(It.IsAny())).Returns(xmlDataHandlerCacheMock.Object); + + XmlDataHandler xmlDataHandler = new XmlDataHandler("path", "root", xmlDataReaderFactoryMock.Object, + xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); + + await xmlDataHandler.SetValue("property", "SomeString"); + + xmlDataHandlerCacheMock.Verify(c => c.SetValue("property", "SomeString", false), Times.Once); + xmlDataWriterMock.Verify(w => w.Write("property", "SomeString", false), Times.Once); + } + + [Test] + public async Task TestSetValueNull() + { + Mock xmlDataReaderMock = new Mock(); + Mock xmlDataReaderFactoryMock = new Mock(); + xmlDataReaderFactoryMock.Setup(r => r.Create(It.IsAny())).Returns(xmlDataReaderMock.Object); + + Mock xmlDataWriterMock = new Mock(); + Mock xmlDataWriterFactoryMock = new Mock(); + xmlDataWriterFactoryMock.Setup(w => w.Create(It.IsAny(), It.IsAny())).Returns(xmlDataWriterMock.Object); + + Mock xmlDataHandlerCacheMock = new Mock(); + Mock xmlDataHandlerCacheFactoryMock = new Mock(); + xmlDataHandlerCacheFactoryMock.Setup(c => c.Create(It.IsAny())).Returns(xmlDataHandlerCacheMock.Object); + + XmlDataHandler xmlDataHandler = new XmlDataHandler("path", "root", xmlDataReaderFactoryMock.Object, + xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); + + await xmlDataHandler.SetValue("property", null); + + xmlDataHandlerCacheMock.Verify(c => c.SetValue(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); + xmlDataWriterMock.Verify(w => w.Write(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); + } + + [Test] + public async Task TestRemoveValue() + { + Mock xmlDataReaderMock = new Mock(); + Mock xmlDataReaderFactoryMock = new Mock(); + xmlDataReaderFactoryMock.Setup(r => r.Create(It.IsAny())).Returns(xmlDataReaderMock.Object); + + Mock xmlDataWriterMock = new Mock(); + Mock xmlDataWriterFactoryMock = new Mock(); + xmlDataWriterFactoryMock.Setup(w => w.Create(It.IsAny(), It.IsAny())).Returns(xmlDataWriterMock.Object); + + Mock xmlDataHandlerCacheMock = new Mock(); + Mock xmlDataHandlerCacheFactoryMock = new Mock(); + xmlDataHandlerCacheFactoryMock.Setup(c => c.Create(It.IsAny())).Returns(xmlDataHandlerCacheMock.Object); + + XmlDataHandler xmlDataHandler = new XmlDataHandler("path", "root", xmlDataReaderFactoryMock.Object, + xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); + + await xmlDataHandler.RemoveValue("property", "SomeString"); + + xmlDataHandlerCacheMock.Verify(c => c.TryRemoveValue("property", "SomeString"), Times.Once); + xmlDataWriterMock.Verify(w => w.Remove("property", "SomeString"), Times.Once); + } + + [Test] + public async Task TestRemoveValueNull() + { + Mock xmlDataReaderMock = new Mock(); + Mock xmlDataReaderFactoryMock = new Mock(); + xmlDataReaderFactoryMock.Setup(r => r.Create(It.IsAny())).Returns(xmlDataReaderMock.Object); + + Mock xmlDataWriterMock = new Mock(); + Mock xmlDataWriterFactoryMock = new Mock(); + xmlDataWriterFactoryMock.Setup(w => w.Create(It.IsAny(), It.IsAny())).Returns(xmlDataWriterMock.Object); + + Mock xmlDataHandlerCacheMock = new Mock(); + Mock xmlDataHandlerCacheFactoryMock = new Mock(); + xmlDataHandlerCacheFactoryMock.Setup(c => c.Create(It.IsAny())).Returns(xmlDataHandlerCacheMock.Object); + + XmlDataHandler xmlDataHandler = new XmlDataHandler("path", "root", xmlDataReaderFactoryMock.Object, + xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); + + await xmlDataHandler.RemoveValue("property", null); + + xmlDataHandlerCacheMock.Verify(c => c.TryRemoveValue(It.IsAny(), It.IsAny()), Times.Never); + xmlDataWriterMock.Verify(w => w.Remove(It.IsAny(), It.IsAny()), Times.Never); + } + + [Test] + public void TestGetValue() + { + List values = new List() { "SomeString", "AnotherString" }; + + Mock xmlDataReaderMock = new Mock(); + //xmlDataReaderMock.Setup(r => r.Read("property")).ReturnsAsync>(values); + + Mock xmlDataReaderFactoryMock = new Mock(); + xmlDataReaderFactoryMock.Setup(r => r.Create(It.IsAny())).Returns(xmlDataReaderMock.Object); + + Mock xmlDataWriterMock = new Mock(); + Mock xmlDataWriterFactoryMock = new Mock(); + xmlDataWriterFactoryMock.Setup(w => w.Create(It.IsAny(), It.IsAny())).Returns(xmlDataWriterMock.Object); + + Mock xmlDataHandlerCacheMock = new Mock(); + Mock xmlDataHandlerCacheFactoryMock = new Mock(); + xmlDataHandlerCacheFactoryMock.Setup(c => c.Create(It.IsAny())).Returns(xmlDataHandlerCacheMock.Object); + + XmlDataHandler xmlDataHandler = new XmlDataHandler("path", "root", xmlDataReaderFactoryMock.Object, + xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); + } + } +} \ No newline at end of file diff --git a/Test.GBase/Test.GBase.csproj b/Test.GBase/Test.GBase.csproj index 47da60a..6cb49d4 100644 --- a/Test.GBase/Test.GBase.csproj +++ b/Test.GBase/Test.GBase.csproj @@ -13,6 +13,7 @@ + all