Cache only stores references.
This commit is contained in:
@ -27,6 +27,21 @@ impl Store {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_by_id<S, D>(&mut self, name: S, id: D) -> Result<(), MTTError>
|
||||
where
|
||||
S: Into<String>,
|
||||
D: Into<String>,
|
||||
{
|
||||
let db_name = name.into();
|
||||
match self.get(&db_name) {
|
||||
Some(_) => Err(MTTError::from_code(ErrorCode::DuplicateDatabase(db_name))),
|
||||
None => {
|
||||
self.data.insert(db_name, Data::from_id(id.into()));
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get(&self, name: &str) -> Option<&Data<Database>> {
|
||||
self.data.get(name)
|
||||
}
|
||||
@ -87,6 +102,53 @@ mod storage {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_using_cache_id() {
|
||||
let mut store = Store::new();
|
||||
let name = "fred";
|
||||
let id = "12345";
|
||||
store.add_by_id(name, id).unwrap();
|
||||
let output = store.get(name).unwrap();
|
||||
assert!(output.data.is_none(), "there should be no data");
|
||||
assert_eq!(output.id, Some(id.to_string()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_by_cache_id_name_string() {
|
||||
let mut store = Store::new();
|
||||
let name = "barney";
|
||||
let id = "67890";
|
||||
store.add_by_id(name.to_string(), id).unwrap();
|
||||
let output = store.get(name).unwrap();
|
||||
assert!(output.data.is_none(), "there should be no data");
|
||||
assert_eq!(output.id, Some(id.to_string()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn no_duplicate_databases_for_add_by_id() {
|
||||
let mut store = Store::new();
|
||||
let name = "betty";
|
||||
store.add_by_id(name, "fghij").unwrap();
|
||||
match store.add_by_id(name, "klmno") {
|
||||
Ok(_) => assert!(false, "Duplicates should error."),
|
||||
Err(err) => match err.code {
|
||||
ErrorCode::DuplicateDatabase(db_name) => assert_eq!(db_name, name),
|
||||
_ => assert!(false, "{:?} is not DuplicateDatabase", err),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_by_cache_id_string() {
|
||||
let mut store = Store::new();
|
||||
let name = "wilma";
|
||||
let id = "abcdef";
|
||||
store.add_by_id(name, id.to_string()).unwrap();
|
||||
let output = store.get(name).unwrap();
|
||||
assert!(output.data.is_none(), "there should be no data");
|
||||
assert_eq!(output.id, Some(id.to_string()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn get_bad_database() -> Result<(), MTTError> {
|
||||
let store = Store::new();
|
||||
|
Reference in New Issue
Block a user