46 lines
1.5 KiB
Rust
46 lines
1.5 KiB
Rust
// file: crates/knowledge-sync-api/unit_tests/lib.rs
|
|
// version: 1
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
struct FakeEventError;
|
|
|
|
struct OneShotEventSource {
|
|
signal: Option<crate::RepositorySyncSignal>,
|
|
}
|
|
|
|
impl crate::RepositoryEventSource for OneShotEventSource {
|
|
type Error = FakeEventError;
|
|
|
|
fn next_signal(&mut self) -> Result<Option<crate::RepositorySyncSignal>, Self::Error> {
|
|
return Ok(self.signal.take());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn external_signal_is_only_a_request_to_reconcile_a_source() {
|
|
let source_result = knowledge_domain_lib::SourceId::new("snippets-extra");
|
|
assert!(source_result.is_ok());
|
|
let source_id = match source_result {
|
|
Ok(value) => value,
|
|
Err(_) => return,
|
|
};
|
|
let signal = crate::RepositorySyncSignal::new(source_id, crate::RepositorySyncCause::ExternalSignal);
|
|
let mut event_source = OneShotEventSource { signal: Some(signal) };
|
|
let first_result = crate::RepositoryEventSource::next_signal(&mut event_source);
|
|
assert!(first_result.is_ok());
|
|
let first = match first_result {
|
|
Ok(value) => value,
|
|
Err(_) => return,
|
|
};
|
|
assert!(first.is_some());
|
|
let signal = match first {
|
|
Some(value) => value,
|
|
None => return,
|
|
};
|
|
assert_eq!(signal.source_id().as_str(), "snippets-extra");
|
|
assert_eq!(signal.cause(), crate::RepositorySyncCause::ExternalSignal);
|
|
let second_result = crate::RepositoryEventSource::next_signal(&mut event_source);
|
|
assert_eq!(second_result, Ok(None));
|
|
return;
|
|
}
|