summaryrefslogtreecommitdiffstats
path: root/libimagstore
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2016-10-09 13:36:06 +0200
committerMatthias Beyer <mail@beyermatthias.de>2016-10-09 18:26:16 +0200
commit9a8a2f1c29204c93ded0d74de449c4f1a83ae626 (patch)
tree47ae0674ffad16b15f237fbb226cdc4598323d5d /libimagstore
parent7050067675c40e041ae53f2901e807a0ddd8ec2f (diff)
Add hook tests for hooks that error with an error that does not abort the action
Diffstat (limited to 'libimagstore')
-rw-r--r--libimagstore/src/store.rs81
1 files changed, 81 insertions, 0 deletions
diff --git a/libimagstore/src/store.rs b/libimagstore/src/store.rs
index 4d173a07..49abf928 100644
--- a/libimagstore/src/store.rs
+++ b/libimagstore/src/store.rs
@@ -2860,5 +2860,86 @@ aspect = "test"
assert!(store.update(fle).is_err());
}
+ fn get_store_with_allowed_error_hook_at_pos(pos: HP) -> Store {
+ let mut store = get_store_with_config();
+ let hook = TestHook::new(pos.clone(), false, false);
+
+ assert!(store.register_hook(pos, "test", Box::new(hook)).map_err(|e| println!("{:?}", e)).is_ok());
+ store
+ }
+
+ #[test]
+ fn test_pre_create_allowed_error() {
+ let store = get_store_with_allowed_error_hook_at_pos(HP::PreCreate);
+ assert!(store.create(default_test_id()).is_ok());
+ }
+
+ #[test]
+ fn test_pre_retrieve_allowed_error() {
+ let store = get_store_with_allowed_error_hook_at_pos(HP::PreRetrieve);
+ assert!(store.retrieve(default_test_id()).is_ok());
+ }
+
+ #[test]
+ fn test_pre_delete_allowed_error() {
+ let store = get_store_with_allowed_error_hook_at_pos(HP::PreDelete);
+ assert!(store.retrieve(default_test_id()).is_ok());
+ assert!(store.delete(default_test_id()).map_err(|e| println!("{:?}", e)).is_ok());
+ }
+
+ #[test]
+ fn test_pre_update_allowed_error() {
+ let store = get_store_with_allowed_error_hook_at_pos(HP::PreUpdate);
+ let fle = store.create(default_test_id()).unwrap();
+
+ assert!(store.update(fle).is_ok());
+ }
+
+ #[test]
+ fn test_post_create_allowed_error() {
+ let store = get_store_with_allowed_error_hook_at_pos(HP::PostCreate);
+ let pb = default_test_id();
+
+ assert!(store.create(pb.clone()).is_ok());
+
+ // But the entry exists, as the hook fails post-create
+ assert!(store.entries.read().unwrap().get(&pb.with_base(store.path().clone())).is_some());
+ }
+
+ #[test]
+ fn test_post_retrieve_allowed_error() {
+ let store = get_store_with_allowed_error_hook_at_pos(HP::PostRetrieve);
+ let pb = default_test_id();
+
+ assert!(store.retrieve(pb.clone()).is_ok());
+
+ // But the entry exists, as the hook fails post-retrieve
+ assert!(store.entries.read().unwrap().get(&pb.with_base(store.path().clone())).is_some());
+ }
+
+ #[test]
+ fn test_post_delete_allowed_error() {
+ let store = get_store_with_allowed_error_hook_at_pos(HP::PostDelete);
+ let pb = default_test_id();
+
+ assert!(store.create(pb.clone()).is_ok());
+ let pb = pb.with_base(store.path().clone());
+ assert!(store.entries.read().unwrap().get(&pb).is_some());
+
+ assert!(store.delete(pb.clone()).is_ok());
+ // But the entry is removed, as we fail post-delete
+ assert!(store.entries.read().unwrap().get(&pb).is_none());
+ }
+
+ #[test]
+ fn test_post_update_allowed_error() {
+ let store = get_store_with_allowed_error_hook_at_pos(HP::PostUpdate);
+ let pb = default_test_id();
+ let fle = store.create(pb.clone()).unwrap();
+ let pb = pb.with_base(store.path().clone());
+
+ assert!(store.entries.read().unwrap().get(&pb).is_some());
+ assert!(store.update(fle).is_ok());
+ }
}