// 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.DataHandling.Cache.Factories; using GBase.DataHandling.Factories; using GBase.Interfaces.DataHandling.Xml; using GBase.Interfaces.DataHandling.Xml.Cache; 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.InitFile(TODO, TODO, It.IsAny())).ReturnsAsync(true); Mock xmlDataWriterFactoryMock = new Mock(); xmlDataWriterFactoryMock.Setup(w => w.Create()).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", 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.InitFile(TODO, TODO, It.IsAny())).ReturnsAsync(true); Mock xmlDataWriterFactoryMock = new Mock(); xmlDataWriterFactoryMock.Setup(w => w.Create()).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", 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.InitFile(TODO, TODO, It.IsAny())).ReturnsAsync(true); Mock xmlDataWriterFactoryMock = new Mock(); xmlDataWriterFactoryMock.Setup(w => w.Create()).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", 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.InitFile(TODO, TODO, It.IsAny())).ReturnsAsync(false); Mock xmlDataWriterFactoryMock = new Mock(); xmlDataWriterFactoryMock.Setup(w => w.Create()).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", 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()).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", xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); await xmlDataHandler.SetValue(TODO, "property", "SomeString", TODO); xmlDataHandlerCacheMock.Verify(c => c.SetValue("property", "SomeString", false), Times.Once); xmlDataWriterMock.Verify(w => w.Write(TODO, "property", "SomeString", TODO, false, TODO), Times.Once); } [Test] public async Task TestSetValueList() { 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()).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", xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); List stringList = new List() {"string", "secondString", "thirdString"}; await xmlDataHandler.SetValue>(TODO, "property", stringList, TODO); xmlDataHandlerCacheMock.Verify(c => c.SetValue>("property", stringList, false), Times.Once); xmlDataWriterMock.Verify(w => w.Write>(TODO, "property", $"{stringList[0]},{stringList[1]},{stringList[2]}", TODO, false, TODO), 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()).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", xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); await xmlDataHandler.SetValue(TODO, "property", null, TODO); xmlDataHandlerCacheMock.Verify(c => c.SetValue(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); xmlDataWriterMock.Verify(w => w.Write(TODO, It.IsAny(), It.IsAny(), TODO, It.IsAny(), TODO), 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()).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", xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); await xmlDataHandler.RemoveValue(TODO, "property", "SomeString", TODO); xmlDataHandlerCacheMock.Verify(c => c.TryRemoveValue("property", "SomeString"), Times.Once); xmlDataWriterMock.Verify(w => w.Remove(TODO, "property", "SomeString", TODO), Times.Once); } [Test] public async Task TestRemoveValueList() { 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()).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", xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); List stringList = new List() { "string", "secondString", "thirdString" }; await xmlDataHandler.RemoveValue>(TODO, "property", stringList, TODO); xmlDataHandlerCacheMock.Verify(c => c.TryRemoveValue>("property", stringList), Times.Once); xmlDataWriterMock.Verify(w => w.Remove>(TODO, "property", $"{stringList[0]},{stringList[1]},{stringList[2]}", TODO), 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()).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", xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); await xmlDataHandler.RemoveValue(TODO, "property", null, TODO); xmlDataHandlerCacheMock.Verify(c => c.TryRemoveValue(It.IsAny(), It.IsAny()), Times.Never); xmlDataWriterMock.Verify(w => w.Remove(TODO, It.IsAny(), It.IsAny(), TODO), 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()).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", xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); } [Test] public async Task TestGetListValue() { 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()).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", xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); IEnumerable> readValues = await xmlDataHandler.GetValues>("property"); } } }