test: seed ready wrapups, federation-off gate target

This commit is contained in:
2026-10-25 21:30:01 +01:00
parent d7bac4aec3
commit 2875594ed9
4 changed files with 68 additions and 28 deletions

View File

@@ -26,8 +26,8 @@ const CLASSIC_VISITOR_PAGES: &[(&str, u16)] = &[
("/logout", 303),
("/tags/drama", 307),
("/users/{id}/watchlist", 200),
("/wrapups/{id}/2025", 404),
("/wrapups/global/2025", 404),
("/wrapups/{id}/2025", 200),
("/wrapups/global/2025", 200),
("/users/{id}/following-list", 303),
("/users/{id}/followers-list", 303),
("/posters/abc.jpg", 308),
@@ -173,7 +173,7 @@ async fn seed() -> Seed {
.connect("sqlite::memory:")
.await
.unwrap();
let router = bootstrap::build_server_on(&test_config(), pool)
let router = bootstrap::build_server_on(&test_config(), pool.clone())
.await
.unwrap();
@@ -231,10 +231,7 @@ async fn seed() -> Seed {
),
)
.await;
assert!(
status == 200 || status == 201,
"log review {status}: {body}"
);
assert_eq!(status, 201, "log review: {body}");
let (status, _, body) = send(
&router,
@@ -246,10 +243,7 @@ async fn seed() -> Seed {
),
)
.await;
assert!(
status == 200 || status == 201,
"create goal {status}: {body}"
);
assert_eq!(status, 200, "create goal: {body}");
let (status, _, body) = send(
&router,
@@ -262,18 +256,14 @@ async fn seed() -> Seed {
.await;
assert_eq!(status, 200, "list movies: {body}");
let movies: serde_json::Value = serde_json::from_str(&body).unwrap();
let first = movies
.get("movies")
.and_then(|m| m.get(0))
.or_else(|| movies.get(0))
.or_else(|| movies.get("items").and_then(|m| m.get(0)))
.unwrap_or_else(|| panic!("no movie in {body}"));
let movie_id = first["id"]
let movie_id = movies["items"][0]["id"]
.as_str()
.or_else(|| first["movie"]["id"].as_str())
.unwrap_or_else(|| panic!("no movie id in {body}"))
.to_string();
seed_ready_wrapup(&pool, Some(&user_id)).await;
seed_ready_wrapup(&pool, None).await;
Seed {
router,
user_id,
@@ -282,6 +272,35 @@ async fn seed() -> Seed {
}
}
/// Inserts a READY 2025 wrap-up record (user scope, or global when `user_id` is None),
/// the state the worker leaves behind after generating a report.
async fn seed_ready_wrapup(pool: &sqlx::SqlitePool, user_id: Option<&str>) {
use chrono::NaiveDate;
use domain::models::wrapup::{DateRange, WrapUpScope};
let start = NaiveDate::from_ymd_opt(2025, 1, 1).unwrap();
let end = NaiveDate::from_ymd_opt(2026, 1, 1).unwrap();
let scope = match user_id {
Some(id) => WrapUpScope::User(id.parse().unwrap()),
None => WrapUpScope::Global,
};
let report = domain::services::wrapup_analyzer::build_report(
scope,
DateRange::new(start, end).unwrap(),
&[],
);
sqlx::query(
"INSERT INTO wrap_up_records (id, user_id, start_date, end_date, status, report_json) \
VALUES (?, ?, '2025-01-01', '2026-01-01', 'ready', ?)",
)
.bind(uuid::Uuid::new_v4().to_string())
.bind(user_id)
.bind(serde_json::to_string(&report).unwrap())
.execute(pool)
.await
.unwrap();
}
fn expand(seed: &Seed, template: &str) -> String {
template
.replace("{id}", &seed.user_id)
@@ -314,6 +333,16 @@ async fn every_classic_page_renders_for_a_visitor() {
#[cfg(not(feature = "federation"))]
check_table(&seed, FEDERATION_OFF_PAGES, None).await;
// A dropped wrapup route would also 404, so require the template itself.
for template in ["/wrapups/{id}/2025", "/wrapups/global/2025"] {
let (status, _, body) = send(&seed.router, get(&expand(&seed, template), None)).await;
assert_eq!(status, 200, "{template}");
assert!(
body.contains("class=\"wu-container\""),
"wrapup template not rendered for {template}"
);
}
// The owner embeds this widget in an iframe on their personal website.
let (status, _, body) = send(
&seed.router,
@@ -339,16 +368,18 @@ async fn every_classic_page_renders_for_the_signed_in_owner() {
#[tokio::test]
async fn feeds_and_openapi_are_served() {
let seed = seed().await;
for template in [
"/feed.rss",
"/users/{id}/feed.rss",
"/openapi.json",
"/docs/",
"/scalar",
// `/docs` (what users type) redirects to the Swagger UI at `/docs/`.
for (template, expected) in [
("/feed.rss", 200),
("/users/{id}/feed.rss", 200),
("/openapi.json", 200),
("/docs", 303),
("/docs/", 200),
("/scalar", 200),
] {
let uri = expand(&seed, template);
let (status, _, _) = send(&seed.router, get(&uri, None)).await;
assert_eq!(status, 200, "{uri}");
assert_eq!(status, expected, "{uri}");
}
}