libvctrl_handler 5.0.0

Fundamental contracts for building a version control system – no implementations, only traits and types
Documentation
#![allow(missing_docs)]
#![allow(clippy::unwrap_used)]
#![allow(clippy::expect_used)]

use libvctrl_handler::*;

#[test]
fn tree_entry_rejects_empty_name() {
    let hash = Hash::from_bytes(&[0_u8; HASH_LENGTH]).unwrap();
    assert!(TreeEntry::new(String::new(), EntryKind::Blob, hash).is_err());
}

#[test]
fn tree_entry_rejects_too_long_name() {
    let hash = Hash::from_bytes(&[0_u8; HASH_LENGTH]).unwrap();
    let long_name =
        "a".repeat(usize::try_from(MAX_NAME_LENGTH).expect("MAX_NAME_LENGTH too large") + 1);
    assert!(TreeEntry::new(long_name, EntryKind::Blob, hash).is_err());
}

#[test]
fn user_id_rejects_empty_name() {
    assert!(UserID::new(String::new(), "email@example.com".into()).is_err());
}

#[test]
fn user_id_rejects_empty_email() {
    assert!(UserID::new("name".into(), String::new()).is_err());
}

#[test]
fn tag_rejects_empty_name() {
    let hash = Hash::from_bytes(&[0_u8; HASH_LENGTH]).unwrap();
    assert!(Tag::new(String::new(), hash, None, "msg".into()).is_err());
}

#[test]
fn blob_accepts_empty_data() {
    let blob = Blob::new(vec![]).unwrap();
    assert!(blob.data().is_empty());
}