use crate::migrate::{Migration, MigrationError, Migrator};
struct OkSample;
impl Migration for OkSample {
fn migrate_rev0(&self, userdata: &[u8]) -> Result<(u32, Vec<u8>), String> {
Ok((666, userdata.to_vec()))
}
}
struct ErrSample;
impl Migration for ErrSample {
fn migrate_rev0(&self, _userdata: &[u8]) -> Result<(u32, Vec<u8>), String> {
Err("xxx".to_string())
}
}
#[test]
fn rev0_assigned_ok() {
let migrator = Migrator::default().with_migration(OkSample);
let (sid, top_id) = migrator.migrate_rev0(&[1, 2, 3]).unwrap().unwrap();
assert_eq!(sid, 666);
assert_eq!(*top_id, [1, 2, 3]);
}
#[test]
fn rev0_assigned_err() {
let migrator = Migrator::default().with_migration(ErrSample);
let err = migrator.migrate_rev0(&[1, 2, 3]).unwrap_err();
assert!(matches!(err, MigrationError::Rev0(cause) if cause == "xxx"));
}
#[test]
fn rev0_unassigned() {
let migrator = Migrator::default();
let opt = migrator.migrate_rev0(&[1, 2, 3]).unwrap();
assert!(opt.is_none());
}