using FakeItEasy; using IW4MAdmin.Application.IO; using Microsoft.Extensions.DependencyInjection; using NUnit.Framework; using SharedLibraryCore.Interfaces; using System; using System.Threading.Tasks; using SharedLibraryCore; namespace ApplicationTests { [TestFixture] public class IOTests { private IServiceProvider serviceProvider; [SetUp] public void Setup() { serviceProvider = new ServiceCollection() .BuildBase() .AddSingleton(new Uri[] { new Uri("C:\\test.log")}) .AddSingleton(A.Fake<IGameLogReaderFactory>()) .AddSingleton<GameLogEventDetection>() .BuildServiceProvider(); } [Test] public async Task GameLogEventDetection_WorksAfterFileSizeReset() { var reader = A.Fake<IGameLogReader>(); var factory = serviceProvider.GetRequiredService<IGameLogReaderFactory>(); A.CallTo(() => factory.CreateGameLogReader(A<Uri[]>.Ignored, A<IEventParser>.Ignored)) .Returns(reader); var detect = serviceProvider.GetRequiredService<GameLogEventDetection>(); A.CallTo(() => reader.Length) .Returns(100) .Once() .Then .Returns(200) .Once() .Then .Returns(10) .Once() .Then .Returns(100); for (int i = 0; i < 4; i++) { await detect.UpdateLogEvents(); } A.CallTo(() => reader.ReadEventsFromLog(A<long>.Ignored, A<long>.Ignored)) .MustHaveHappenedTwiceExactly(); } } }