@@ -77,31 +77,24 @@ def test_has_generate_node(self, workflow_path):
7777 assert _nodes_by_type (wf , "AcestepCPPGenerate" ), \
7878 "Workflow must include AcestepCPPGenerate"
7979
80- # --- Output node: save-then-play ----------------- ---------------------
80+ # --- Output: generate node is itself the output node ---------------------
8181
82- def test_uses_save_audio_not_preview_audio (self , workflow_path ):
82+ def test_has_no_audio_output_node (self , workflow_path ):
83+ """AcestepCPPGenerate is itself an OUTPUT_NODE; no SaveAudio or PreviewAudio needed."""
8384 wf = _load (workflow_path )
8485 node_types = [n ["type" ] for n in wf ["nodes" ]]
86+ assert "SaveAudio" not in node_types , \
87+ "SaveAudio is no longer needed; AcestepCPPGenerate copies the file and shows its own player"
8588 assert "PreviewAudio" not in node_types , \
86- "PreviewAudio (play-only) should be replaced by SaveAudio (save-then-play)"
87- assert "SaveAudio" in node_types , \
88- "SaveAudio must be present so generated audio is persisted to disk"
89+ "PreviewAudio is no longer needed; AcestepCPPGenerate shows its own audio player"
8990
90- def test_save_audio_has_filename_prefix (self , workflow_path ):
91+ def test_generate_has_no_output_links (self , workflow_path ):
92+ """AcestepCPPGenerate is a terminal output node; its output slot must have no outgoing links."""
9193 wf = _load (workflow_path )
92- for node in _nodes_by_type (wf , "SaveAudio" ):
93- wv = node .get ("widgets_values" , [])
94- assert len (wv ) >= 1 and isinstance (wv [0 ], str ) and wv [0 ], \
95- "SaveAudio must have a non-empty filename_prefix widget value"
96-
97- def test_save_audio_format_is_mp3 (self , workflow_path ):
98- """SaveAudio must use mp3 format — not the ComfyUI default of flac."""
99- wf = _load (workflow_path )
100- for node in _nodes_by_type (wf , "SaveAudio" ):
101- wv = node .get ("widgets_values" , [])
102- got = repr (wv [1 ]) if len (wv ) > 1 else "(missing)"
103- assert len (wv ) >= 2 and wv [1 ] == "mp3" , \
104- f"SaveAudio format (index 1) must be 'mp3', got { got } "
94+ for node in _nodes_by_type (wf , "AcestepCPPGenerate" ):
95+ for output in node .get ("outputs" , []):
96+ assert not output .get ("links" ), \
97+ f"AcestepCPPGenerate output '{ output .get ('name' )} ' should have no outgoing links"
10598
10699 # --- Model loader widget values ---------------------------------------
107100
@@ -310,12 +303,3 @@ def test_model_loader_output_connected(self, workflow_path):
310303 for node in _nodes_by_type (wf , "AcestepCPPModelLoader" ):
311304 assert node ["id" ] in link_src_nodes , \
312305 "AcestepCPPModelLoader output is not connected to any node"
313-
314- def test_generate_output_connected_to_save_audio (self , workflow_path ):
315- """AcestepCPPGenerate audio output must feed into SaveAudio."""
316- wf = _load (workflow_path )
317- node_ids = {n ["id" ]: n for n in wf ["nodes" ]}
318- save_audio_ids = {n ["id" ] for n in _nodes_by_type (wf , "SaveAudio" )}
319- # Walk links: find any link whose destination is a SaveAudio node
320- connected = any (lnk [3 ] in save_audio_ids for lnk in wf .get ("links" , []))
321- assert connected , "No link from any node to SaveAudio found"
0 commit comments