helm-schema-k8s 0.0.7

Generate an accurate JSON schema for any helm chart
Documentation
use super::*;
use crate::inference::InferenceSource;
use test_util::prelude::sim_assert_eq;

fn candidate(
    api_version: &str,
    source: InferenceSource,
    origin: ProviderOrigin,
) -> ApiVersionCandidate {
    ApiVersionCandidate {
        api_version: api_version.to_string(),
        source,
        origin,
    }
}

#[test]
fn declaration_order_is_inference_priority() {
    let mut sources = vec![
        InferenceSource::OnlineProbe,
        InferenceSource::LocalCacheScan,
        InferenceSource::Shortlist,
        InferenceSource::ChartLocalCrd,
    ];
    sources.sort();
    sim_assert_eq!(
        have: sources,
        want: vec![
            InferenceSource::ChartLocalCrd,
            InferenceSource::Shortlist,
            InferenceSource::LocalCacheScan,
            InferenceSource::OnlineProbe,
        ]
    );

    let mut origins = vec![
        ProviderOrigin::KubernetesOpenApi,
        ProviderOrigin::DefaultCatalog,
        ProviderOrigin::ChartLocalCrd,
        ProviderOrigin::LocalOverride,
    ];
    origins.sort();
    sim_assert_eq!(
        have: origins,
        want: vec![
            ProviderOrigin::LocalOverride,
            ProviderOrigin::ChartLocalCrd,
            ProviderOrigin::DefaultCatalog,
            ProviderOrigin::KubernetesOpenApi,
        ]
    );
}

#[test]
fn chart_local_crd_candidate_beats_remote_catalog_candidate() {
    let outcome = aggregate(vec![
        candidate(
            "remote.example.com/v1",
            InferenceSource::Shortlist,
            ProviderOrigin::DefaultCatalog,
        ),
        candidate(
            "local.example.com/v1",
            InferenceSource::ChartLocalCrd,
            ProviderOrigin::ChartLocalCrd,
        ),
    ]);

    let ApiVersionInferenceOutcome::Resolved {
        api_version,
        source,
        origin,
    } = outcome
    else {
        panic!("expected resolved chart-local CRD candidate, got {outcome:?}");
    };
    sim_assert_eq!(
        have: (api_version.as_str(), source, origin),
        want: (
            "local.example.com/v1",
            InferenceSource::ChartLocalCrd,
            ProviderOrigin::ChartLocalCrd
        )
    );
}

#[test]
fn explicit_override_candidate_beats_chart_local_crd_candidate() {
    let outcome = aggregate(vec![
        candidate(
            "local.example.com/v1",
            InferenceSource::ChartLocalCrd,
            ProviderOrigin::ChartLocalCrd,
        ),
        candidate(
            "override.example.com/v1",
            InferenceSource::Shortlist,
            ProviderOrigin::LocalOverride,
        ),
    ]);

    let ApiVersionInferenceOutcome::Resolved {
        api_version,
        source,
        origin,
    } = outcome
    else {
        panic!("expected resolved explicit override candidate, got {outcome:?}");
    };
    sim_assert_eq!(
        have: (api_version.as_str(), source, origin),
        want: (
            "override.example.com/v1",
            InferenceSource::Shortlist,
            ProviderOrigin::LocalOverride
        )
    );
}