Lines
100 %
Functions
87.5 %
Branches
//! Pure (DB-free) tests for `:date` coercion in the logical payload parser.
use super::parse::parse_create_transaction_logical_payload;
/// Build a minimal valid logical payload carrying the given `:date` literal.
fn payload_with_date(date: &str) -> String {
format!(
"(:date \"{date}\" :splits ((:from \"a\" :to \"b\" \
:from-commodity \"USD\" :to-commodity \"USD\" :value 1)))"
)
}
fn parse_date(date: &str) -> Result<String, String> {
let input = parse_create_transaction_logical_payload(&payload_with_date(date))?;
Ok(input
.post_date
.ok_or_else(|| "post_date missing".to_string())?
.to_rfc3339())
#[test]
fn accepts_rfc3339_with_timezone() {
let parsed = parse_date("2026-06-15T09:30:00+02:00").expect("rfc3339 accepted");
assert_eq!(parsed, "2026-06-15T07:30:00+00:00");
fn accepts_datetime_local_with_seconds_as_utc() {
let parsed = parse_date("2026-06-15T09:30:45").expect("datetime-local accepted");
assert_eq!(parsed, "2026-06-15T09:30:45+00:00");
fn accepts_datetime_local_without_seconds_as_utc() {
let parsed = parse_date("2026-06-15T09:30").expect("datetime-local accepted");
assert_eq!(parsed, "2026-06-15T09:30:00+00:00");
fn accepts_bare_date_as_midnight_utc() {
let parsed = parse_date("2026-06-15").expect("bare date accepted");
assert_eq!(parsed, "2026-06-15T00:00:00+00:00");
fn rejects_clearly_invalid_date() {
let err = parse_date("not-a-date").expect_err("invalid date must error");
assert!(
err.contains("invalid :date"),
"expected invalid-date error, got: {err}"
);