public static void AddSmtpHealthCheck_NullTags_SetsDefaultTags()
        {
            AddSmtpHealthCheckArguments healthCheckArguments = null;

            var mockBuilder = new Mock <IHealthChecksBuilder>();

            mockBuilder.Setup(b => b.Add(It.IsNotNull <HealthCheckRegistration>()))
            .Callback <HealthCheckRegistration>(r => AddSmtpHealthCheckCallback(r, out healthCheckArguments));

            var builder = mockBuilder.Object;

            builder.AddSmtpHealthCheck(new SmtpSettings());

            healthCheckArguments.Tags.Should().BeEquivalentTo(HealthCheck.DefaultTags);
        }
        public static void AddSmtpHealthCheck_SetsExpectedName()
        {
            AddSmtpHealthCheckArguments healthCheckArguments = null;

            var mockBuilder = new Mock <IHealthChecksBuilder>();

            mockBuilder.Setup(b => b.Add(It.IsNotNull <HealthCheckRegistration>()))
            .Callback <HealthCheckRegistration>(r => AddSmtpHealthCheckCallback(r, out healthCheckArguments));

            var builder = mockBuilder.Object;

            builder.AddSmtpHealthCheck(new SmtpSettings());

            healthCheckArguments.Name.Should().Be(HealthCheck.Name);
        }
        public static void AddSmtpHealthCheck_SetsConnectionTypeOption()
        {
            AddSmtpHealthCheckArguments healthCheckArguments = null;

            var mockBuilder = new Mock <IHealthChecksBuilder>();

            mockBuilder.Setup(b => b.Add(It.IsNotNull <HealthCheckRegistration>()))
            .Callback <HealthCheckRegistration>(r => AddSmtpHealthCheckCallback(r, out healthCheckArguments));

            var builder = mockBuilder.Object;

            builder.AddSmtpHealthCheck(new SmtpSettings());

            healthCheckArguments.Options.ConnectionType.Should().Be(SmtpConnectionType.TLS);
        }
        public static void AddSmtpHealthCheck_SetsExpectedTimeout()
        {
            AddSmtpHealthCheckArguments healthCheckArguments = null;

            var mockBuilder = new Mock <IHealthChecksBuilder>();

            mockBuilder.Setup(b => b.Add(It.IsNotNull <HealthCheckRegistration>()))
            .Callback <HealthCheckRegistration>(r => AddSmtpHealthCheckCallback(r, out healthCheckArguments));

            var timeout = TimeSpan.FromSeconds(90);

            var builder = mockBuilder.Object;

            builder.AddSmtpHealthCheck(new SmtpSettings(), timeout: timeout);

            healthCheckArguments.Timeout.Should().Be(timeout);
        }
        public static void AddSmtpHealthCheck_SetsAllowInvalidRemoteCertificatesOption()
        {
            AddSmtpHealthCheckArguments healthCheckArguments = null;

            var mockBuilder = new Mock <IHealthChecksBuilder>();

            mockBuilder.Setup(b => b.Add(It.IsNotNull <HealthCheckRegistration>()))
            .Callback <HealthCheckRegistration>(r => AddSmtpHealthCheckCallback(r, out healthCheckArguments));

            var settings = new SmtpSettings {
                AllowInvalidCertificate = true
            };

            var builder = mockBuilder.Object;

            builder.AddSmtpHealthCheck(settings);

            healthCheckArguments.Options.AllowInvalidRemoteCertificates.Should().BeTrue();
        }
        private static void AddSmtpHealthCheckCallback(
            HealthCheckRegistration registration,
            out AddSmtpHealthCheckArguments arguments)
        {
            var factoryTarget = registration.Factory.Target;
            var options       = factoryTarget
                                ?.GetType()
                                .GetField("options")
                                ?.GetValue(factoryTarget) as SmtpHealthCheckOptions;

            arguments = new AddSmtpHealthCheckArguments
            {
                FailureStatus = registration.FailureStatus,
                Name          = registration.Name,
                Options       = options,
                Tags          = registration.Tags,
                Timeout       = registration.Timeout,
            };
        }
        public static void AddSmtpHealthCheck_SetsPortOption()
        {
            const int expectedPort = 1234;

            AddSmtpHealthCheckArguments healthCheckArguments = null;

            var mockBuilder = new Mock <IHealthChecksBuilder>();

            mockBuilder.Setup(b => b.Add(It.IsNotNull <HealthCheckRegistration>()))
            .Callback <HealthCheckRegistration>(r => AddSmtpHealthCheckCallback(r, out healthCheckArguments));

            var settings = new SmtpSettings {
                Port = expectedPort
            };

            var builder = mockBuilder.Object;

            builder.AddSmtpHealthCheck(settings);

            healthCheckArguments.Options.Port.Should().Be(expectedPort);
        }