use crate::key_id_storage::key_id_storage::KeyIdStorage;
use crate::key_id_storage::KeyIdStorageResult;
use crate::key_id_storage::method_digest::MethodDigest;
use crate::key_id_storage::KeyIdStorageError;
use crate::key_id_storage::KeyIdStorageErrorKind;
use crate::key_storage::KeyId;
use crate::storage::tests::test_utils::create_verification_method;
pub(crate) async fn test_storage_operations(storage: impl KeyIdStorage) {
let verification_method = create_verification_method();
let key_id_1 = KeyId::new("keyid");
let method_digest: MethodDigest = MethodDigest::new(&verification_method).unwrap();
storage
.insert_key_id(method_digest.clone(), key_id_1.clone())
.await
.expect("inserting into memstore failed");
let insertion_result = storage.insert_key_id(method_digest.clone(), key_id_1.clone()).await;
let _expected_error: KeyIdStorageError = KeyIdStorageError::new(KeyIdStorageErrorKind::KeyIdAlreadyExists);
assert!(matches!(insertion_result.unwrap_err(), _expected_error));
let key_id: KeyId = storage.get_key_id(&method_digest).await.unwrap();
assert_eq!(key_id_1, key_id);
storage.delete_key_id(&method_digest).await.expect("deletion failed");
let retrieval_result: KeyIdStorageResult<KeyId> = storage.get_key_id(&method_digest).await;
let _expected_error: KeyIdStorageError = KeyIdStorageError::new(KeyIdStorageErrorKind::KeyIdNotFound);
assert!(matches!(retrieval_result.unwrap_err(), _expected_error));
let repeat_deletion_result: KeyIdStorageResult<()> = storage.delete_key_id(&method_digest).await;
let _expected_error: KeyIdStorageError = KeyIdStorageError::new(KeyIdStorageErrorKind::KeyIdNotFound);
assert!(matches!(repeat_deletion_result.unwrap_err(), _expected_error));
}