use std::rc::Rc;
use crate::password::{PasswordError, PasswordStore};
#[test]
fn with_value() {
let mut store = PasswordStore::with_value(&[1, 2, 3]);
assert_eq!(store.value().unwrap(), [1, 2, 3]);
}
#[test]
fn no_callback() {
let mut store = PasswordStore::new(None);
let err = store.value().unwrap_err();
assert!(matches!(err, PasswordError::NoPassword));
}
#[test]
fn error_from_callback() {
let mut store = PasswordStore::new(Some(Rc::new(|| Err(String::from("some error")))));
let err = store.value().unwrap_err();
assert!(matches!(err, PasswordError::PasswordCallback(msg) if msg == "some error"));
}
#[test]
fn value_from_callback() {
let mut store = PasswordStore::new(Some(Rc::new(|| Ok(vec![1, 2, 3]))));
let value1 = store.value().unwrap();
assert_eq!(value1, [1, 2, 3]);
{
let value2 = store.value().unwrap();
assert_eq!(value2, [1, 2, 3]);
}
}