@@ -1205,3 +1205,53 @@ async fn replay_fixture_denies_a2a_discover_loopback_when_allow_private_false()
12051205
12061206 server. abort ( ) ;
12071207}
1208+
1209+ #[ test]
1210+ #[ serial]
1211+ fn replay_fixtures_are_valid_and_referenced_by_session_replay ( ) {
1212+ let manifest_dir = std:: path:: Path :: new ( env ! ( "CARGO_MANIFEST_DIR" ) ) ;
1213+ let fixture_dir = manifest_dir. join ( "tests/fixtures/replay" ) ;
1214+ let source_path = manifest_dir. join ( "tests/session_replay.rs" ) ;
1215+
1216+ let source = std:: fs:: read_to_string ( & source_path)
1217+ . unwrap_or_else ( |err| panic ! ( "read {}: {err}" , source_path. display( ) ) ) ;
1218+
1219+ let mut fixture_names: Vec < String > = Vec :: new ( ) ;
1220+ for entry in std:: fs:: read_dir ( & fixture_dir)
1221+ . unwrap_or_else ( |err| panic ! ( "read {}: {err}" , fixture_dir. display( ) ) )
1222+ {
1223+ let entry = entry. expect ( "fixture dir entry" ) ;
1224+ let path = entry. path ( ) ;
1225+ if path. extension ( ) . and_then ( |ext| ext. to_str ( ) ) != Some ( "json" ) {
1226+ continue ;
1227+ }
1228+
1229+ let file_name = path
1230+ . file_name ( )
1231+ . expect ( "fixture file name" )
1232+ . to_string_lossy ( )
1233+ . to_string ( ) ;
1234+ let raw = std:: fs:: read_to_string ( & path)
1235+ . unwrap_or_else ( |err| panic ! ( "read {}: {err}" , path. display( ) ) ) ;
1236+
1237+ let _: Vec < serde_json:: Value > = serde_json:: from_str ( & raw )
1238+ . unwrap_or_else ( |err| panic ! ( "fixture `{file_name}` must be a JSON array: {err}" ) ) ;
1239+
1240+ fixture_names. push ( file_name) ;
1241+ }
1242+
1243+ fixture_names. sort ( ) ;
1244+ assert ! (
1245+ !fixture_names. is_empty( ) ,
1246+ "expected fixtures under {}" ,
1247+ fixture_dir. display( )
1248+ ) ;
1249+
1250+ for name in fixture_names {
1251+ let needle = format ! ( "fixtures/replay/{name}" ) ;
1252+ assert ! (
1253+ source. contains( & needle) ,
1254+ "fixture `{name}` exists on disk but is not referenced by session_replay.rs via `{needle}`"
1255+ ) ;
1256+ }
1257+ }
0 commit comments