refactor: move inline tests to separate files via #[path]
This commit is contained in:
@@ -39,63 +39,5 @@ impl NatsConfig {
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn errors_without_nats_url() {
|
||||
unsafe { std::env::remove_var("NATS_URL"); }
|
||||
assert!(NatsConfig::from_env().is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn defaults_with_only_url() {
|
||||
unsafe {
|
||||
std::env::set_var("NATS_URL", "nats://localhost:4222");
|
||||
std::env::remove_var("NATS_MODE");
|
||||
std::env::remove_var("NATS_SUBJECT_PREFIX");
|
||||
std::env::remove_var("NATS_STREAM_NAME");
|
||||
std::env::remove_var("NATS_CONSUMER_NAME");
|
||||
}
|
||||
|
||||
let cfg = NatsConfig::from_env().unwrap();
|
||||
assert_eq!(cfg.url, "nats://localhost:4222");
|
||||
assert_eq!(cfg.mode, NatsMode::JetStream);
|
||||
assert_eq!(cfg.subject_prefix, "movies-diary.events");
|
||||
assert_eq!(cfg.stream_name, "MOVIES_DIARY_EVENTS");
|
||||
assert_eq!(cfg.consumer_name, "worker");
|
||||
|
||||
unsafe { std::env::remove_var("NATS_URL"); }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn core_mode_parsed() {
|
||||
unsafe {
|
||||
std::env::set_var("NATS_URL", "nats://test:4222");
|
||||
std::env::set_var("NATS_MODE", "core");
|
||||
}
|
||||
|
||||
let cfg = NatsConfig::from_env().unwrap();
|
||||
assert_eq!(cfg.mode, NatsMode::Core);
|
||||
|
||||
unsafe {
|
||||
std::env::remove_var("NATS_URL");
|
||||
std::env::remove_var("NATS_MODE");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn invalid_mode_errors() {
|
||||
unsafe {
|
||||
std::env::set_var("NATS_URL", "nats://test:4222");
|
||||
std::env::set_var("NATS_MODE", "kafka");
|
||||
}
|
||||
|
||||
assert!(NatsConfig::from_env().is_err());
|
||||
|
||||
unsafe {
|
||||
std::env::remove_var("NATS_URL");
|
||||
std::env::remove_var("NATS_MODE");
|
||||
}
|
||||
}
|
||||
}
|
||||
#[path = "tests/config.rs"]
|
||||
mod tests;
|
||||
|
||||
@@ -19,63 +19,5 @@ pub fn consumer_subject_filter(prefix: &str) -> String {
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use chrono::NaiveDateTime;
|
||||
use domain::value_objects::{ExternalMetadataId, MovieId, Rating, ReviewId, UserId};
|
||||
use uuid::Uuid;
|
||||
|
||||
fn dt() -> NaiveDateTime {
|
||||
chrono::DateTime::from_timestamp(1_700_000_000, 0).unwrap().naive_utc()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn review_logged_subject() {
|
||||
let event = DomainEvent::ReviewLogged {
|
||||
review_id: ReviewId::from_uuid(Uuid::new_v4()),
|
||||
movie_id: MovieId::from_uuid(Uuid::new_v4()),
|
||||
user_id: UserId::from_uuid(Uuid::new_v4()),
|
||||
rating: Rating::new(3).unwrap(),
|
||||
watched_at: dt(),
|
||||
};
|
||||
assert_eq!(
|
||||
event_to_subject("movies-diary.events", &event),
|
||||
"movies-diary.events.review.logged"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn review_updated_subject() {
|
||||
let event = DomainEvent::ReviewUpdated {
|
||||
review_id: ReviewId::from_uuid(Uuid::new_v4()),
|
||||
movie_id: MovieId::from_uuid(Uuid::new_v4()),
|
||||
user_id: UserId::from_uuid(Uuid::new_v4()),
|
||||
rating: Rating::new(5).unwrap(),
|
||||
watched_at: dt(),
|
||||
};
|
||||
assert_eq!(
|
||||
event_to_subject("movies-diary.events", &event),
|
||||
"movies-diary.events.review.updated"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn movie_discovered_subject() {
|
||||
let event = DomainEvent::MovieDiscovered {
|
||||
movie_id: MovieId::from_uuid(Uuid::new_v4()),
|
||||
external_metadata_id: ExternalMetadataId::new("tt0000001".into()).unwrap(),
|
||||
};
|
||||
assert_eq!(
|
||||
event_to_subject("movies-diary.events", &event),
|
||||
"movies-diary.events.movie.discovered"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn consumer_subject_filter_appends_wildcard() {
|
||||
assert_eq!(
|
||||
consumer_subject_filter("movies-diary.events"),
|
||||
"movies-diary.events.>"
|
||||
);
|
||||
}
|
||||
}
|
||||
#[path = "tests/subject.rs"]
|
||||
mod tests;
|
||||
|
||||
58
crates/adapters/nats/src/tests/config.rs
Normal file
58
crates/adapters/nats/src/tests/config.rs
Normal file
@@ -0,0 +1,58 @@
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn errors_without_nats_url() {
|
||||
unsafe { std::env::remove_var("NATS_URL"); }
|
||||
assert!(NatsConfig::from_env().is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn defaults_with_only_url() {
|
||||
unsafe {
|
||||
std::env::set_var("NATS_URL", "nats://localhost:4222");
|
||||
std::env::remove_var("NATS_MODE");
|
||||
std::env::remove_var("NATS_SUBJECT_PREFIX");
|
||||
std::env::remove_var("NATS_STREAM_NAME");
|
||||
std::env::remove_var("NATS_CONSUMER_NAME");
|
||||
}
|
||||
|
||||
let cfg = NatsConfig::from_env().unwrap();
|
||||
assert_eq!(cfg.url, "nats://localhost:4222");
|
||||
assert_eq!(cfg.mode, NatsMode::JetStream);
|
||||
assert_eq!(cfg.subject_prefix, "movies-diary.events");
|
||||
assert_eq!(cfg.stream_name, "MOVIES_DIARY_EVENTS");
|
||||
assert_eq!(cfg.consumer_name, "worker");
|
||||
|
||||
unsafe { std::env::remove_var("NATS_URL"); }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn core_mode_parsed() {
|
||||
unsafe {
|
||||
std::env::set_var("NATS_URL", "nats://test:4222");
|
||||
std::env::set_var("NATS_MODE", "core");
|
||||
}
|
||||
|
||||
let cfg = NatsConfig::from_env().unwrap();
|
||||
assert_eq!(cfg.mode, NatsMode::Core);
|
||||
|
||||
unsafe {
|
||||
std::env::remove_var("NATS_URL");
|
||||
std::env::remove_var("NATS_MODE");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn invalid_mode_errors() {
|
||||
unsafe {
|
||||
std::env::set_var("NATS_URL", "nats://test:4222");
|
||||
std::env::set_var("NATS_MODE", "kafka");
|
||||
}
|
||||
|
||||
assert!(NatsConfig::from_env().is_err());
|
||||
|
||||
unsafe {
|
||||
std::env::remove_var("NATS_URL");
|
||||
std::env::remove_var("NATS_MODE");
|
||||
}
|
||||
}
|
||||
58
crates/adapters/nats/src/tests/subject.rs
Normal file
58
crates/adapters/nats/src/tests/subject.rs
Normal file
@@ -0,0 +1,58 @@
|
||||
use super::*;
|
||||
use chrono::NaiveDateTime;
|
||||
use domain::value_objects::{ExternalMetadataId, MovieId, Rating, ReviewId, UserId};
|
||||
use uuid::Uuid;
|
||||
|
||||
fn dt() -> NaiveDateTime {
|
||||
chrono::DateTime::from_timestamp(1_700_000_000, 0).unwrap().naive_utc()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn review_logged_subject() {
|
||||
let event = DomainEvent::ReviewLogged {
|
||||
review_id: ReviewId::from_uuid(Uuid::new_v4()),
|
||||
movie_id: MovieId::from_uuid(Uuid::new_v4()),
|
||||
user_id: UserId::from_uuid(Uuid::new_v4()),
|
||||
rating: Rating::new(3).unwrap(),
|
||||
watched_at: dt(),
|
||||
};
|
||||
assert_eq!(
|
||||
event_to_subject("movies-diary.events", &event),
|
||||
"movies-diary.events.review.logged"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn review_updated_subject() {
|
||||
let event = DomainEvent::ReviewUpdated {
|
||||
review_id: ReviewId::from_uuid(Uuid::new_v4()),
|
||||
movie_id: MovieId::from_uuid(Uuid::new_v4()),
|
||||
user_id: UserId::from_uuid(Uuid::new_v4()),
|
||||
rating: Rating::new(5).unwrap(),
|
||||
watched_at: dt(),
|
||||
};
|
||||
assert_eq!(
|
||||
event_to_subject("movies-diary.events", &event),
|
||||
"movies-diary.events.review.updated"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn movie_discovered_subject() {
|
||||
let event = DomainEvent::MovieDiscovered {
|
||||
movie_id: MovieId::from_uuid(Uuid::new_v4()),
|
||||
external_metadata_id: ExternalMetadataId::new("tt0000001".into()).unwrap(),
|
||||
};
|
||||
assert_eq!(
|
||||
event_to_subject("movies-diary.events", &event),
|
||||
"movies-diary.events.movie.discovered"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn consumer_subject_filter_appends_wildcard() {
|
||||
assert_eq!(
|
||||
consumer_subject_filter("movies-diary.events"),
|
||||
"movies-diary.events.>"
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user