domain: add Storage & Sources entities (StorageVolume, LibraryPath, IngestSession, Quota)
This commit is contained in:
49
crates/domain/tests/entities/ingest_session.rs
Normal file
49
crates/domain/tests/entities/ingest_session.rs
Normal file
@@ -0,0 +1,49 @@
|
||||
use domain::entities::{IngestSession, IngestStatus};
|
||||
use domain::errors::DomainError;
|
||||
use domain::value_objects::{Checksum, SystemId};
|
||||
|
||||
fn make_session() -> IngestSession {
|
||||
let checksum = Checksum::new("a".repeat(64)).unwrap();
|
||||
IngestSession::new(
|
||||
SystemId::new(),
|
||||
"device-1",
|
||||
"photo.jpg",
|
||||
checksum,
|
||||
SystemId::new(),
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn valid_state_transitions() {
|
||||
let mut s = make_session();
|
||||
assert_eq!(s.status, IngestStatus::Uploading);
|
||||
s.advance_to(IngestStatus::AwaitingProcessing).unwrap();
|
||||
assert_eq!(s.status, IngestStatus::AwaitingProcessing);
|
||||
s.advance_to(IngestStatus::Processing).unwrap();
|
||||
assert_eq!(s.status, IngestStatus::Processing);
|
||||
s.advance_to(IngestStatus::Completed).unwrap();
|
||||
assert_eq!(s.status, IngestStatus::Completed);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn invalid_transition_rejected() {
|
||||
let mut s = make_session();
|
||||
let result = s.advance_to(IngestStatus::Completed);
|
||||
assert!(matches!(result, Err(DomainError::Validation(_))));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn can_fail_from_any_non_terminal() {
|
||||
for target in [IngestStatus::Uploading, IngestStatus::AwaitingProcessing, IngestStatus::Processing] {
|
||||
let mut s = make_session();
|
||||
// advance to target state
|
||||
if target == IngestStatus::AwaitingProcessing || target == IngestStatus::Processing {
|
||||
s.advance_to(IngestStatus::AwaitingProcessing).unwrap();
|
||||
}
|
||||
if target == IngestStatus::Processing {
|
||||
s.advance_to(IngestStatus::Processing).unwrap();
|
||||
}
|
||||
s.advance_to(IngestStatus::Failed).unwrap();
|
||||
assert_eq!(s.status, IngestStatus::Failed);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user