@@ -297,9 +297,6 @@ TEST_F(AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_Mark
297297 EXPECT_CALL (*m_knownPlugins, setPluginsState (uninstalledPluginIdList, AudioPluginState::Missing))
298298 .WillOnce (Return (make_ok ()));
299299
300- EXPECT_CALL (*m_knownPlugins, setPluginsState (PluginResourceIdList {}, AudioPluginState::Validated))
301- .WillOnce (Return (make_ok ()));
302-
303300 EXPECT_CALL (*m_knownPlugins, unregisterPlugins (_))
304301 .Times (0 );
305302
@@ -313,7 +310,7 @@ TEST_F(AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_Mark
313310 EXPECT_TRUE (ret);
314311}
315312
316- TEST_F (AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_RediscoverFormerlyMissing )
313+ TEST_F (AudioPlugins_RegisterAudioPluginsScenarioTest, ScanPlugins_FormerlyMissingFoundAgainIsRevalidated )
317314{
318315 auto createPluginInfo = [](const io::path_t & path, AudioPluginState state) {
319316 AudioPluginInfo info;
@@ -324,7 +321,7 @@ TEST_F(AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_Redi
324321 return info;
325322 };
326323
327- // [GIVEN] One Missing entry that gets reinstalled , one untouched Validated entry
324+ // [GIVEN] One Missing entry that reappears , one untouched Validated entry
328325 AudioPluginInfoList knownPlugins;
329326 knownPlugins.push_back (createPluginInfo (" /some/path/AAA.vst3" , AudioPluginState::Missing));
330327 knownPlugins.push_back (createPluginInfo (" /some/path/BBB.vst3" , AudioPluginState::Validated));
@@ -346,20 +343,16 @@ TEST_F(AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_Redi
346343 .WillByDefault (Return (foundPluginPaths));
347344 }
348345
349- // [THEN] Only AAA gets transitioned back to Validated
350- PluginResourceIdList rediscoveredIds { knownPlugins[0 ].meta .id };
351-
352- EXPECT_CALL (*m_knownPlugins, setPluginsState (PluginResourceIdList {}, AudioPluginState::Missing))
353- .WillOnce (Return (make_ok ()));
354-
355- EXPECT_CALL (*m_knownPlugins, setPluginsState (rediscoveredIds, AudioPluginState::Validated))
356- .WillOnce (Return (make_ok ()));
357-
358- EXPECT_CALL (*m_knownPlugins, load ())
359- .WillOnce (Return (muse::make_ok ()));
346+ // [WHEN] Scanning
347+ const PluginScanResult result = m_scenario->scanPlugins ();
360348
361- Ret ret = m_scenario->updatePluginsRegistry ();
362- EXPECT_TRUE (ret);
349+ // [THEN] The reappeared Missing plugin is queued for out-of-process
350+ // re-validation rather than trusted straight back to Validated — its binary
351+ // may now be a newer build that no longer passes validation. The untouched
352+ // Validated plugin is left alone.
353+ EXPECT_TRUE (muse::contains (result.newPluginPaths , path_t (" /some/path/AAA.vst3" )));
354+ EXPECT_FALSE (muse::contains (result.newPluginPaths , path_t (" /some/path/BBB.vst3" )));
355+ EXPECT_TRUE (result.missingPluginIds .empty ());
363356}
364357
365358TEST_F (AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_MultiPluginBinaryMarksEveryIdMissing)
@@ -403,8 +396,6 @@ TEST_F(AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_Mult
403396
404397 EXPECT_CALL (*m_knownPlugins, setPluginsState (expectedMissing, AudioPluginState::Missing))
405398 .WillOnce (Return (make_ok ()));
406- EXPECT_CALL (*m_knownPlugins, setPluginsState (PluginResourceIdList {}, AudioPluginState::Validated))
407- .WillOnce (Return (make_ok ()));
408399
409400 EXPECT_CALL (*m_knownPlugins, load ())
410401 .WillOnce (Return (make_ok ()));
@@ -413,7 +404,7 @@ TEST_F(AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_Mult
413404 EXPECT_TRUE (ret);
414405}
415406
416- TEST_F (AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_MultiPluginBinaryRediscoversEveryId )
407+ TEST_F (AudioPlugins_RegisterAudioPluginsScenarioTest, ScanPlugins_FormerlyMissingMultiIdBinaryQueuedOnce )
417408{
418409 auto createPluginInfo = [](const io::path_t & path, const PluginResourceId& id, AudioPluginState state) {
419410 AudioPluginInfo info;
@@ -445,19 +436,14 @@ TEST_F(AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_Mult
445436 .WillByDefault (Return (foundPluginPaths));
446437 }
447438
448- // [THEN] BOTH ids transition back to Validated — not just the last one.
449- PluginResourceIdList expectedRediscovered { " Shell FxA" , " Shell FxB" };
450-
451- EXPECT_CALL (*m_knownPlugins, setPluginsState (PluginResourceIdList {}, AudioPluginState::Missing))
452- .WillOnce (Return (make_ok ()));
453- EXPECT_CALL (*m_knownPlugins, setPluginsState (expectedRediscovered, AudioPluginState::Validated))
454- .WillOnce (Return (make_ok ()));
439+ // [WHEN] Scanning
440+ const PluginScanResult result = m_scenario->scanPlugins ();
455441
456- EXPECT_CALL (*m_knownPlugins, load ())
457- . WillOnce ( Return ( make_ok ()));
458-
459- Ret ret = m_scenario-> updatePluginsRegistry ( );
460- EXPECT_TRUE (ret );
442+ // [THEN] The reappeared binary is queued once for re-validation; the
443+ // subprocess re-derives each id's state. Nothing is trusted back to
444+ // Validated, and nothing is left Missing.
445+ EXPECT_EQ (result. newPluginPaths , paths_t { shellPath } );
446+ EXPECT_TRUE (result. missingPluginIds . empty () );
461447}
462448
463449TEST_F (AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_LeftoverDiscoveredRevalidates)
@@ -491,12 +477,9 @@ TEST_F(AudioPlugins_RegisterAudioPluginsScenarioTest, UpdatePluginsRegistry_Left
491477
492478 // [THEN] The Discovered path is treated as new — registered as a fresh
493479 // placeholder and re-validated via subprocess. It is NOT marked Missing
494- // (it's still on disk) and it is NOT considered "rediscovered" (that's
495- // for paths transitioning out of Missing).
480+ // (it's still on disk).
496481 EXPECT_CALL (*m_knownPlugins, setPluginsState (PluginResourceIdList {}, AudioPluginState::Missing))
497482 .WillOnce (Return (make_ok ()));
498- EXPECT_CALL (*m_knownPlugins, setPluginsState (PluginResourceIdList {}, AudioPluginState::Validated))
499- .WillOnce (Return (make_ok ()));
500483
501484 // [THEN] registerNewPlugins writes a Discovered placeholder for the path
502485 // before spawning the subprocess.
0 commit comments