Formatting
This commit is contained in:
@@ -6,9 +6,9 @@ use std::sync::Arc;
|
||||
use doctate_server::config::{Config, User, WhisperUserSettings};
|
||||
use doctate_server::transcribe;
|
||||
use doctate_server::transcribe::ffmpeg::remux_faststart;
|
||||
use doctate_server::transcribe::ollama::{generate_oneliner, OllamaError};
|
||||
use doctate_server::transcribe::ollama::{OllamaError, generate_oneliner};
|
||||
use doctate_server::transcribe::recovery::scan_and_enqueue;
|
||||
use doctate_server::transcribe::whisper::{transcribe, WhisperError};
|
||||
use doctate_server::transcribe::whisper::{WhisperError, transcribe};
|
||||
use serde_json::json;
|
||||
use wiremock::matchers::{body_partial_json, method, path, query_param};
|
||||
use wiremock::{Mock, MockServer, ResponseTemplate};
|
||||
@@ -24,9 +24,7 @@ async fn ffmpeg_remux_produces_valid_output() {
|
||||
let input = fixture("sample.m4a");
|
||||
assert!(input.exists(), "fixture missing: {}", input.display());
|
||||
|
||||
let output = remux_faststart(&input)
|
||||
.await
|
||||
.expect("remux failed");
|
||||
let output = remux_faststart(&input).await.expect("remux failed");
|
||||
|
||||
let meta = std::fs::metadata(output.path()).expect("output missing");
|
||||
assert!(meta.len() > 0, "output file is empty");
|
||||
@@ -45,7 +43,10 @@ async fn ffmpeg_remux_produces_valid_output() {
|
||||
.expect("ffprobe spawn failed");
|
||||
assert!(probe.status.success(), "ffprobe failed");
|
||||
let fmt = String::from_utf8_lossy(&probe.stdout);
|
||||
assert!(fmt.contains("mp4") || fmt.contains("m4a"), "unexpected format: {fmt}");
|
||||
assert!(
|
||||
fmt.contains("mp4") || fmt.contains("m4a"),
|
||||
"unexpected format: {fmt}"
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
@@ -134,7 +135,10 @@ async fn whisper_client_times_out() {
|
||||
.await
|
||||
.expect_err("expected timeout");
|
||||
|
||||
assert!(matches!(err, WhisperError::Http(_)), "expected Http error, got {err:?}");
|
||||
assert!(
|
||||
matches!(err, WhisperError::Http(_)),
|
||||
"expected Http error, got {err:?}"
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
@@ -170,8 +174,14 @@ async fn whisper_client_forwards_hotwords_and_prompt_when_set() {
|
||||
let received = server.received_requests().await.unwrap();
|
||||
let body = String::from_utf8_lossy(&received[0].body);
|
||||
assert!(body.contains("name=\"hotwords\""), "hotwords part missing");
|
||||
assert!(body.contains("HOCM Valsalva"), "hotwords value missing: {body}");
|
||||
assert!(body.contains("name=\"initial_prompt\""), "initial_prompt part missing");
|
||||
assert!(
|
||||
body.contains("HOCM Valsalva"),
|
||||
"hotwords value missing: {body}"
|
||||
);
|
||||
assert!(
|
||||
body.contains("name=\"initial_prompt\""),
|
||||
"initial_prompt part missing"
|
||||
);
|
||||
assert!(body.contains("Kardiologie"), "initial_prompt value missing");
|
||||
}
|
||||
|
||||
@@ -203,8 +213,14 @@ async fn whisper_client_omits_empty_optional_fields() {
|
||||
// Inspect the captured request to confirm absence of the optional parts.
|
||||
let received = server.received_requests().await.unwrap();
|
||||
let body = String::from_utf8_lossy(&received[0].body);
|
||||
assert!(!body.contains("name=\"hotwords\""), "hotwords part leaked: {body}");
|
||||
assert!(!body.contains("name=\"initial_prompt\""), "initial_prompt part leaked: {body}");
|
||||
assert!(
|
||||
!body.contains("name=\"hotwords\""),
|
||||
"hotwords part leaked: {body}"
|
||||
);
|
||||
assert!(
|
||||
!body.contains("name=\"initial_prompt\""),
|
||||
"initial_prompt part leaked: {body}"
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
@@ -363,15 +379,24 @@ async fn ollama_oneliner_parses_chat_response() {
|
||||
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/api/chat"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(ok_chat_body("HOCM mit Septum-Hypertrophie")))
|
||||
.respond_with(
|
||||
ResponseTemplate::new(200).set_body_json(ok_chat_body("HOCM mit Septum-Hypertrophie")),
|
||||
)
|
||||
.expect(1)
|
||||
.mount(&server)
|
||||
.await;
|
||||
|
||||
let client = reqwest::Client::new();
|
||||
let out = generate_oneliner(&client, &server.uri(), MODEL, 0, "irrelevant", Duration::from_secs(5))
|
||||
.await
|
||||
.expect("call failed");
|
||||
let out = generate_oneliner(
|
||||
&client,
|
||||
&server.uri(),
|
||||
MODEL,
|
||||
0,
|
||||
"irrelevant",
|
||||
Duration::from_secs(5),
|
||||
)
|
||||
.await
|
||||
.expect("call failed");
|
||||
|
||||
assert_eq!(out, "HOCM mit Septum-Hypertrophie");
|
||||
}
|
||||
@@ -381,14 +406,23 @@ async fn ollama_oneliner_normalizes_response() {
|
||||
let server = MockServer::start().await;
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/api/chat"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(ok_chat_body("\"Kniegelenk re., V.a. Meniskus.\"\nSonstiges")))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(ok_chat_body(
|
||||
"\"Kniegelenk re., V.a. Meniskus.\"\nSonstiges",
|
||||
)))
|
||||
.mount(&server)
|
||||
.await;
|
||||
|
||||
let client = reqwest::Client::new();
|
||||
let out = generate_oneliner(&client, &server.uri(), MODEL, 0, "x", Duration::from_secs(5))
|
||||
.await
|
||||
.unwrap();
|
||||
let out = generate_oneliner(
|
||||
&client,
|
||||
&server.uri(),
|
||||
MODEL,
|
||||
0,
|
||||
"x",
|
||||
Duration::from_secs(5),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(out, "Kniegelenk re., V.a. Meniskus");
|
||||
}
|
||||
|
||||
@@ -402,9 +436,16 @@ async fn ollama_oneliner_returns_status_on_500() {
|
||||
.await;
|
||||
|
||||
let client = reqwest::Client::new();
|
||||
let err = generate_oneliner(&client, &server.uri(), MODEL, 0, "x", Duration::from_secs(5))
|
||||
.await
|
||||
.expect_err("expected error");
|
||||
let err = generate_oneliner(
|
||||
&client,
|
||||
&server.uri(),
|
||||
MODEL,
|
||||
0,
|
||||
"x",
|
||||
Duration::from_secs(5),
|
||||
)
|
||||
.await
|
||||
.expect_err("expected error");
|
||||
match err {
|
||||
OllamaError::Status { status, body } => {
|
||||
assert_eq!(status, 500);
|
||||
@@ -430,9 +471,16 @@ async fn ollama_oneliner_sends_keep_alive_and_model() {
|
||||
.await;
|
||||
|
||||
let client = reqwest::Client::new();
|
||||
let _ = generate_oneliner(&client, &server.uri(), MODEL, 0, "irrelevant", Duration::from_secs(5))
|
||||
.await
|
||||
.expect("call failed");
|
||||
let _ = generate_oneliner(
|
||||
&client,
|
||||
&server.uri(),
|
||||
MODEL,
|
||||
0,
|
||||
"irrelevant",
|
||||
Duration::from_secs(5),
|
||||
)
|
||||
.await
|
||||
.expect("call failed");
|
||||
// Mock::expect(1) + server drop verifies the matcher hit exactly once.
|
||||
}
|
||||
|
||||
@@ -446,8 +494,15 @@ async fn ollama_oneliner_parse_error_on_missing_content() {
|
||||
.await;
|
||||
|
||||
let client = reqwest::Client::new();
|
||||
let err = generate_oneliner(&client, &server.uri(), MODEL, 0, "x", Duration::from_secs(5))
|
||||
.await
|
||||
.expect_err("expected parse error");
|
||||
let err = generate_oneliner(
|
||||
&client,
|
||||
&server.uri(),
|
||||
MODEL,
|
||||
0,
|
||||
"x",
|
||||
Duration::from_secs(5),
|
||||
)
|
||||
.await
|
||||
.expect_err("expected parse error");
|
||||
assert!(matches!(err, OllamaError::Parse(_)), "got {err:?}");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user