package com.codebyte.api.config.ssl;

import static org.assertj.core.api.Assertions.assertThat;

import com.codebyte.api.support.TestPki;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.boot.actuate.health.Status;

class SslCertificateHealthIndicatorTest {

    private static PemSslMaterial material(TestPki pki) {
        return new PemSslMaterial(pki.leafKey, List.of(pki.leaf, pki.intermediate));
    }

    @Test
    void should_be_up_when_certificate_is_far_from_expiry() {
        var health = new SslCertificateHealthIndicator(material(TestPki.threeLevel())).health();
        assertThat(health.getStatus()).isEqualTo(Status.UP);
    }

    @Test
    void should_be_out_of_service_when_certificate_expires_within_30_days() {
        var health =
                new SslCertificateHealthIndicator(material(TestPki.leafExpiringInDays(20)))
                        .health();
        assertThat(health.getStatus()).isEqualTo(Status.OUT_OF_SERVICE);
    }

    @Test
    void should_be_down_when_certificate_expires_within_14_days() {
        var health =
                new SslCertificateHealthIndicator(material(TestPki.leafExpiringInDays(5))).health();
        assertThat(health.getStatus()).isEqualTo(Status.DOWN);
        assertThat(health.getDetails()).containsKey("minDaysToExpiry");
    }
}
