using FluentAssertions; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Quartz; using Quartz.Impl; using Quartz.Spi; using SilkierQuartz; using SilkierQuartz.HostedService; using System; using Xunit; namespace SilkierQuartz.Test { public class IServiceCollectionExtensionsUnitTest { [Fact(DisplayName = "Registered HostedService")] public void IServiceCollectionExtensions_Register_HostedService() { IServiceCollection serviceCollection = new ServiceCollection(); IServiceCollectionExtensions.UseQuartzHostedService(serviceCollection, null); var testClass = serviceCollection.BuildServiceProvider().GetRequiredService(); testClass.Should() .NotBeNull() .And.BeOfType(); } [Fact(DisplayName = "IJobFactory(d - di in Job)")] public void IServiceCollectionExtensions_Register_IJobFactory() { IServiceCollection serviceCollection = new ServiceCollection(); IServiceCollectionExtensions.UseQuartzHostedService(serviceCollection, null); var testClass = serviceCollection.BuildServiceProvider().GetRequiredService(); testClass.Should() .NotBeNull() .And.BeOfType(); } [Fact(DisplayName = "ISchedulerFactory(did not pass the parameters for initialization)")] public void IServiceCollectionExtensions_Register_ISchedulerFactory() { IServiceCollection serviceCollection = new ServiceCollection(); IServiceCollectionExtensions.UseQuartzHostedService(serviceCollection, null); var testClass = serviceCollection.BuildServiceProvider().GetRequiredService(); testClass.Should() .NotBeNull() .And.BeOfType(); } [Fact(DisplayName = "ISchedulerFactory(transmitted parameters for initialization)")] public void IServiceCollectionExtensions_Register_ISchedulerFactory_WithParams() { IServiceCollection serviceCollection = new ServiceCollection(); IServiceCollectionExtensions.UseQuartzHostedService(serviceCollection, options => { options.Add("quartz.threadPool.threadCount", "1"); }); // TODO: ѕроверить что параметры передались в конструктор var testClass = serviceCollection.BuildServiceProvider().GetRequiredService(); testClass.Should() .NotBeNull() .And.BeOfType(); } [Fact(DisplayName = "IJobRegistrator registration")] public void IServiceCollectionExtensions_Return_IJobRegistrator() { IServiceCollection serviceCollection = new ServiceCollection(); var result = IServiceCollectionExtensions.UseQuartzHostedService(serviceCollection, null); result.Should() .NotBeNull() .And.BeAssignableTo() .Subject.Services.Should().Equal(serviceCollection); } } }