// 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 void TestInit() { Mock xmlDataReaderMock = new Mock(); Mock xmlDataReaderFactoryMock = new Mock(); xmlDataReaderFactoryMock.Setup(r => r.Create()).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(xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); Assert.True(xmlDataHandler.Init(false)); } [Test] public void TestInitFailedTriedTwice() { Mock xmlDataReaderMock = new Mock(); Mock xmlDataReaderFactoryMock = new Mock(); xmlDataReaderFactoryMock.Setup(r => r.Create()).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(xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); Assert.True(xmlDataHandler.Init(false)); Assert.False(xmlDataHandler.Init(false)); } [Test] public async Task TestSetValue() { Mock xmlDataReaderMock = new Mock(); Mock xmlDataReaderFactoryMock = new Mock(); xmlDataReaderFactoryMock.Setup(r => r.Create()).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(xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); await xmlDataHandler.SetValue(null, "property", "SomeString", new CancellationToken()); xmlDataHandlerCacheMock.Verify(c => c.SetValue("property", "SomeString", false), Times.Once); xmlDataWriterMock.Verify(w => w.Write(null, "property", "SomeString", false, It.IsAny()), Times.Once); } [Test] public async Task TestSetValueList() { Mock xmlDataReaderMock = new Mock(); Mock xmlDataReaderFactoryMock = new Mock(); xmlDataReaderFactoryMock.Setup(r => r.Create()).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(xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); List stringList = new List() {"string", "secondString", "thirdString"}; await xmlDataHandler.SetValue>(null, "property", stringList, new CancellationToken()); xmlDataHandlerCacheMock.Verify(c => c.SetValue>("property", stringList, false), Times.Once); xmlDataWriterMock.Verify(w => w.Write>(null, "property", $"{stringList[0]},{stringList[1]},{stringList[2]}",false, It.IsAny()), Times.Once); } [Test] public async Task TestSetValueNull() { Mock xmlDataReaderMock = new Mock(); Mock xmlDataReaderFactoryMock = new Mock(); xmlDataReaderFactoryMock.Setup(r => r.Create()).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(xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); await xmlDataHandler.SetValue(null, "property", null, new CancellationToken()); xmlDataHandlerCacheMock.Verify(c => c.SetValue(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); xmlDataWriterMock.Verify(w => w.Write(null, It.IsAny(), 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()).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(xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); await xmlDataHandler.RemoveValue(null, "property", "SomeString", new CancellationToken()); xmlDataHandlerCacheMock.Verify(c => c.TryRemoveValue("property", "SomeString"), Times.Once); xmlDataWriterMock.Verify(w => w.Remove(null, "property", "SomeString", It.IsAny()), Times.Once); } [Test] public async Task TestRemoveValueList() { Mock xmlDataReaderMock = new Mock(); Mock xmlDataReaderFactoryMock = new Mock(); xmlDataReaderFactoryMock.Setup(r => r.Create()).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(xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); List stringList = new List() { "string", "secondString", "thirdString" }; await xmlDataHandler.RemoveValue>(null, "property", stringList, new CancellationToken()); xmlDataHandlerCacheMock.Verify(c => c.TryRemoveValue>("property", stringList), Times.Once); xmlDataWriterMock.Verify(w => w.Remove>(null, "property", $"{stringList[0]},{stringList[1]},{stringList[2]}", It.IsAny()), Times.Once); } [Test] public async Task TestRemoveValueNull() { Mock xmlDataReaderMock = new Mock(); Mock xmlDataReaderFactoryMock = new Mock(); xmlDataReaderFactoryMock.Setup(r => r.Create()).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(xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); await xmlDataHandler.RemoveValue(null, "property", null, new CancellationToken()); xmlDataHandlerCacheMock.Verify(c => c.TryRemoveValue(It.IsAny(), It.IsAny()), Times.Never); xmlDataWriterMock.Verify(w => w.Remove(null, It.IsAny(), 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()).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(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()).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(xmlDataReaderFactoryMock.Object, xmlDataWriterFactoryMock.Object, xmlDataHandlerCacheFactoryMock.Object); IEnumerable> readValues = await xmlDataHandler.GetValues>(null, "property", new CancellationToken()); } } }