public CertificateProvider(IHostEnvironment hostEnvironment, IDbConfiguration dbConfiguration,
                            ILetsEncryptClient letsEncryptClient)
 {
     this.hostEnvironment   = hostEnvironment;
     this.dbConfiguration   = dbConfiguration;
     this.letsEncryptClient = letsEncryptClient;
 }
        public void Initialize()
        {
            var persistenceService = Substitute.For <IPersistenceService>();

            var options = new LetsEncryptOptions
            {
                Domains      = new[] { "test.com" },
                Email        = "*****@*****.**",
                KeyAlgorithm = KeyAlgorithm.ES512,
                UseStaging   = true,
            };

            var certificateValidator = Substitute.For <ICertificateValidator>();

            certificateValidator.IsCertificateValid(null).Returns(false);
            certificateValidator.IsCertificateValid(RefEq(InvalidCert)).Returns(false);
            certificateValidator.IsCertificateValid(RefEq(ValidCert)).Returns(true);

            var client  = Substitute.For <ILetsEncryptClient>();
            var factory = Substitute.For <ILetsEncryptClientFactory>();

            factory.GetClient().Returns(Task.FromResult(client));

            var sut = new CertificateProvider(
                options,
                certificateValidator,
                persistenceService,
                factory,
                NullLogger <CertificateProvider> .Instance);

            PersistenceService       = persistenceService;
            CertificateValidator     = certificateValidator;
            LetsEncryptClientFactory = factory;
            LetsEncryptClient        = client;

            Sut = sut;
        }