graphile_worker_extensions 0.1.8

Extensions package for graphile_worker, a high performance Rust/PostgreSQL job queue
Documentation
use super::*;

#[test]
fn test_insert_and_get() {
    let mut ext = Extensions::new();
    assert!(ext.insert(5i32).is_none());
    assert_eq!(ext.get::<i32>(), Some(&5i32));
}

#[test]
fn test_new_starts_empty() {
    let ext = Extensions::new();
    assert!(ext.is_empty());
    assert_eq!(ext.len(), 0);
    assert!(ext.get::<i32>().is_none());
}

#[test]
fn test_insert_returns_replaced_value() {
    let mut ext = Extensions::new();
    assert!(ext.insert(5i32).is_none());
    assert_eq!(ext.insert(7i32), Some(5i32));
    assert_eq!(ext.get::<i32>(), Some(&7i32));
}

#[test]
fn test_insert_and_get_mut() {
    let mut ext = Extensions::new();
    ext.insert(String::from("Hello"));
    ext.get_mut::<String>().unwrap().push_str(" World");
    assert_eq!(ext.get::<String>().unwrap(), "Hello World");
}

#[test]
fn test_get_mut_missing_returns_none() {
    let mut ext = Extensions::new();
    assert!(ext.get_mut::<String>().is_none());
}

#[test]
fn test_get_or_insert() {
    let mut ext = Extensions::new();
    *ext.get_or_insert(1i32) += 2;
    assert_eq!(ext.get::<i32>(), Some(&3i32));
}

#[test]
fn test_get_or_insert_with() {
    let mut ext = Extensions::new();
    *ext.get_or_insert_with(|| 1i32) += 2;
    assert_eq!(ext.get::<i32>(), Some(&3i32));
}

#[test]
fn test_get_or_insert_with_keeps_existing_value() {
    let mut ext = Extensions::new();
    ext.insert(1i32);
    *ext.get_or_insert_with(|| 9i32) += 2;
    assert_eq!(ext.get::<i32>(), Some(&3i32));
}

#[test]
fn test_get_or_insert_default() {
    let mut ext = Extensions::new();
    *ext.get_or_insert_default::<i32>() += 2;
    assert_eq!(ext.get::<i32>(), Some(&2i32));
}

#[test]
fn test_remove() {
    let mut ext = Extensions::new();
    ext.insert(5i32);
    assert_eq!(ext.remove::<i32>(), Some(5i32));
    assert!(ext.get::<i32>().is_none());
}

#[test]
fn test_clear() {
    let mut ext = Extensions::new();
    ext.insert(5i32);
    ext.clear();
    assert!(ext.get::<i32>().is_none());
}

#[test]
fn test_is_empty() {
    let mut ext = Extensions::new();
    assert!(ext.is_empty());
    ext.insert(5i32);
    assert!(!ext.is_empty());
}

#[test]
fn test_len() {
    let mut ext = Extensions::new();
    assert_eq!(ext.len(), 0);
    ext.insert(5i32);
    assert_eq!(ext.len(), 1);
}

#[test]
fn test_extend() {
    let mut ext_a = Extensions::new();
    ext_a.insert(8u8);
    ext_a.insert(16u16);

    let mut ext_b = Extensions::new();
    ext_b.insert(4u8);
    ext_b.insert("hello");

    ext_a.extend(ext_b);
    assert_eq!(ext_a.len(), 3);
    assert_eq!(ext_a.get::<u8>(), Some(&4u8));
    assert_eq!(ext_a.get::<u16>(), Some(&16u16));
    assert_eq!(ext_a.get::<&'static str>().copied(), Some("hello"));
}

#[test]
fn test_extend_into_empty() {
    let mut ext_a = Extensions::new();
    let mut ext_b = Extensions::new();
    ext_b.insert(4u8);

    ext_a.extend(ext_b);

    assert_eq!(ext_a.get::<u8>(), Some(&4u8));
}

#[test]
fn test_clone_and_read_only_extensions() {
    let mut ext = Extensions::new();
    ext.insert(String::from("hello"));

    let cloned = ext.clone();
    assert_eq!(cloned.get::<String>().unwrap(), "hello");

    let read_only = ReadOnlyExtensions::from(cloned);
    assert_eq!(read_only.get::<String>().unwrap(), "hello");
    assert_eq!(read_only.len(), 1);
    assert!(!read_only.is_empty());
}