test: move small adapter tests to tests/

event-publisher, export, rss, media-server, object-storage, nats(config).
Kept inline (private fn, no public path): nats src/subject.rs
tests::{review_logged_subject,review_updated_subject,movie_discovered_subject,
consumer_subject_filter_appends_wildcard} - event_to_subject/consumer_subject_filter private.
object-storage build_local_store tests rewritten via StorageConfig::from_config.
This commit is contained in:
2026-10-25 22:47:54 +01:00
parent fdf4df38af
commit 74674b157c
16 changed files with 35 additions and 48 deletions

View File

@@ -0,0 +1,69 @@
use domain::ports::MediaServerParser;
use media_server::JellyfinParser;
#[test]
fn parses_valid_playback_stop() {
let body = serde_json::json!({
"NotificationType": "PlaybackStop",
"ItemType": "Movie",
"Name": "Blade Runner",
"Year": 1982,
"PlayedToCompletion": true,
"Provider_tmdb": "78",
"Provider_imdb": "tt0083658"
});
let parser = JellyfinParser;
let result = parser
.parse_playback_event(serde_json::to_vec(&body).unwrap().as_slice())
.unwrap();
let event = result.expect("should parse");
assert_eq!(event.title, "Blade Runner");
assert_eq!(event.year, Some(1982));
assert_eq!(event.tmdb_id, Some("tmdb:78".into()));
assert_eq!(event.imdb_id, Some("tt0083658".into()));
}
#[test]
fn ignores_non_movie() {
let body = serde_json::json!({
"NotificationType": "PlaybackStop",
"ItemType": "Episode",
"Name": "Some Episode",
"PlayedToCompletion": true
});
let parser = JellyfinParser;
let result = parser
.parse_playback_event(serde_json::to_vec(&body).unwrap().as_slice())
.unwrap();
assert!(result.is_none());
}
#[test]
fn ignores_incomplete_playback() {
let body = serde_json::json!({
"NotificationType": "PlaybackStop",
"ItemType": "Movie",
"Name": "Blade Runner",
"PlayedToCompletion": false
});
let parser = JellyfinParser;
let result = parser
.parse_playback_event(serde_json::to_vec(&body).unwrap().as_slice())
.unwrap();
assert!(result.is_none());
}
#[test]
fn ignores_playback_start() {
let body = serde_json::json!({
"NotificationType": "PlaybackStart",
"ItemType": "Movie",
"Name": "Blade Runner",
"PlayedToCompletion": false
});
let parser = JellyfinParser;
let result = parser
.parse_playback_event(serde_json::to_vec(&body).unwrap().as_slice())
.unwrap();
assert!(result.is_none());
}

View File

@@ -0,0 +1,96 @@
use domain::ports::MediaServerParser;
use media_server::PlexParser;
#[test]
fn parses_movie_scrobble() {
let body = serde_json::json!({
"event": "media.scrobble",
"Metadata": {
"type": "movie",
"title": "Blade Runner",
"year": 1982,
"Guid": [
{"id": "tmdb://78"},
{"id": "imdb://tt0083658"}
]
}
});
let parser = PlexParser;
let result = parser
.parse_playback_event(serde_json::to_vec(&body).unwrap().as_slice())
.unwrap();
let event = result.expect("should parse");
assert_eq!(event.title, "Blade Runner");
assert_eq!(event.year, Some(1982));
assert_eq!(event.tmdb_id, Some("tmdb:78".into()));
assert_eq!(event.imdb_id, Some("tt0083658".into()));
}
#[test]
fn ignores_tv_episode() {
let body = serde_json::json!({
"event": "media.scrobble",
"Metadata": {
"type": "episode",
"title": "Pilot",
"grandparentTitle": "Breaking Bad",
"year": 2008,
"Guid": []
}
});
let parser = PlexParser;
let result = parser
.parse_playback_event(serde_json::to_vec(&body).unwrap().as_slice())
.unwrap();
assert!(result.is_none());
}
#[test]
fn ignores_play_event() {
let body = serde_json::json!({
"event": "media.play",
"Metadata": {
"type": "movie",
"title": "Blade Runner",
"year": 1982,
"Guid": []
}
});
let parser = PlexParser;
let result = parser
.parse_playback_event(serde_json::to_vec(&body).unwrap().as_slice())
.unwrap();
assert!(result.is_none());
}
#[test]
fn handles_no_guids() {
let body = serde_json::json!({
"event": "media.scrobble",
"Metadata": {
"type": "movie",
"title": "Some Indie Film",
"year": 2023
}
});
let parser = PlexParser;
let result = parser
.parse_playback_event(serde_json::to_vec(&body).unwrap().as_slice())
.unwrap();
let event = result.expect("should parse");
assert_eq!(event.title, "Some Indie Film");
assert!(event.tmdb_id.is_none());
assert!(event.imdb_id.is_none());
}
#[test]
fn handles_missing_metadata() {
let body = serde_json::json!({
"event": "media.scrobble"
});
let parser = PlexParser;
let result = parser
.parse_playback_event(serde_json::to_vec(&body).unwrap().as_slice())
.unwrap();
assert!(result.is_none());
}