// file: crates/knowledge-sync-api/unit_tests/lib.rs // version: 1 #[derive(Debug, Eq, PartialEq)] struct FakeEventError; struct OneShotEventSource { signal: Option, } impl crate::RepositoryEventSource for OneShotEventSource { type Error = FakeEventError; fn next_signal(&mut self) -> Result, 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; }