ocpi-tariffs 0.43.0

OCPI tariff calculations
Documentation
use std::path::Path;

use assert_matches::assert_matches;

use crate::{test, ObjectType, Versioned as _};

use super::{cdr_version_and_report, tariff_version_with_report, Report, Version};

#[test_each::file(
    glob = "ocpi-tariffs/test_data/v221/real_world/*/cdr*.json",
    name(segments = 2)
)]
fn should_guess_version_v221(cdr_json: &str, path: &Path) {
    test::setup();

    {
        let Report {
            version,
            unexpected_fields,
        } = cdr_version_and_report(cdr_json).unwrap();

        let tariff = assert_matches!(version, Version::Certain ( tariff ) => tariff );
        assert_matches!(tariff.version(), crate::Version::V221);

        test::assert_no_unexpected_fields(ObjectType::Cdr, &unexpected_fields);
    }

    {
        let tariff = std::fs::read_to_string(path.parent().unwrap().join("tariff.json")).ok();

        if let Some(tariff) = tariff {
            let Report {
                version: guess,
                unexpected_fields,
            } = tariff_version_with_report(&tariff).unwrap();

            let tariff = assert_matches!(guess, Version::Certain ( tariff ) => tariff);
            assert_matches!(tariff.version(), crate::Version::V221);

            test::assert_no_unexpected_fields(ObjectType::Tariff, &unexpected_fields);
        }
    }
}

#[test_each::file(
    glob = "ocpi-tariffs/test_data/v211/lint/*/cdr*.json",
    name(segments = 2)
)]
fn should_guess_version_v211(cdr_json: &str, path: &Path) {
    test::setup();

    {
        let Report {
            version: guess,
            unexpected_fields,
        } = cdr_version_and_report(cdr_json).unwrap();

        let cdr = assert_matches!(guess, Version::Certain ( cdr ) => cdr);
        assert_matches!(cdr.version(), crate::Version::V211);

        test::assert_no_unexpected_fields(ObjectType::Cdr, &unexpected_fields);
    }

    {
        let tariff_json = std::fs::read_to_string(path.parent().unwrap().join("tariff.json")).ok();

        if let Some(tariff) = tariff_json {
            let Report {
                version: guess,
                unexpected_fields,
            } = tariff_version_with_report(&tariff).unwrap();

            let tariff = assert_matches!(guess, Version::Certain ( tariff ) => tariff);
            assert_matches!(tariff.version(), crate::Version::V211);

            test::assert_no_unexpected_fields(ObjectType::Tariff, &unexpected_fields);
        }
    }
}