using ApplicationTests.Fixtures; using ApplicationTests.Mocks; using FakeItEasy; using IW4MAdmin; using Microsoft.Extensions.DependencyInjection; using SharedLibraryCore.Configuration; using SharedLibraryCore.Interfaces; using System; using ILogger = Microsoft.Extensions.Logging.ILogger; namespace ApplicationTests { static class DependencyInjectionExtensions { public static IServiceCollection BuildBase(this IServiceCollection serviceCollection, IEventHandler eventHandler = null) { if (eventHandler == null) { eventHandler = new EventHandlerMock(); serviceCollection.AddSingleton(eventHandler as EventHandlerMock); } else if (eventHandler is EventHandlerMock mockEventHandler) { serviceCollection.AddSingleton(mockEventHandler); } var manager = A.Fake<IManager>(); var transLookup = A.Fake<ITranslationLookup>(); A.CallTo(() => transLookup[A<string>.Ignored]) .Returns("test"); serviceCollection .AddLogging() .AddSingleton(A.Fake<ILogger>()) .AddSingleton(A.Fake<SharedLibraryCore.Interfaces.ILogger>()) .AddSingleton(new ServerConfiguration { IPAddress = "127.0.0.1", Port = 28960 }) .AddSingleton(manager) .AddSingleton<IDatabaseContextFactory, DatabaseContextFactoryMock>() .AddSingleton<IW4MServer>() .AddSingleton(A.Fake<IRConConnectionFactory>()) .AddSingleton(A.Fake<IRConConnection>()) .AddSingleton(transLookup) .AddSingleton(A.Fake<IRConParser>()) .AddSingleton(A.Fake<IParserRegexFactory>()) .AddSingleton<DataFileLoader>() .AddSingleton(A.Fake<IGameLogReaderFactory>()) .AddSingleton(A.Fake<IMetaService>()) .AddSingleton(A.Fake<IClientNoticeMessageFormatter>()) .AddSingleton(eventHandler) .AddSingleton(ConfigurationGenerators.CreateApplicationConfiguration()) .AddSingleton(ConfigurationGenerators.CreateCommandConfiguration()) .AddSingleton<IConfigurationHandler<ApplicationConfiguration>, ApplicationConfigurationHandlerMock>(); return serviceCollection; } public static IServiceProvider SetupTestHooks(this IServiceProvider serviceProvider) { var mgr = serviceProvider.GetRequiredService<IManager>(); A.CallTo(() => mgr.GetApplicationSettings()) .Returns(serviceProvider.GetRequiredService<IConfigurationHandler<ApplicationConfiguration>>()); return serviceProvider; } } }