From f575081a288475daaeaafb6716c5894c9634f4da Mon Sep 17 00:00:00 2001
From: David Cameron <david@cadeyrn.us>
Date: Sat, 1 Mar 2025 20:01:56 -0600
Subject: [PATCH 1/2] Reset highwater mark *before* rolling back

---
 .../migrate/source/SourcePluginBase.php       |  6 ++---
 .../tests/src/Unit/MigrateSourceTest.php      | 27 +++++++++++++++++++
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php b/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php
index c1614d64afe4..ff172e40e9b1 100644
--- a/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php
+++ b/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php
@@ -609,15 +609,15 @@ protected function getHighWaterField() {
    * {@inheritdoc}
    */
   public function preRollback(MigrateRollbackEvent $event) {
-    // Nothing to do in this implementation.
+    // Reset the high-water mark.
+    $this->saveHighWater(NULL);
   }
 
   /**
    * {@inheritdoc}
    */
   public function postRollback(MigrateRollbackEvent $event) {
-    // Reset the high-water mark.
-    $this->saveHighWater(NULL);
+    // Nothing to do in this implementation.
   }
 
   /**
diff --git a/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php b/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
index 2f0b85ffbc47..2fce7d434820 100644
--- a/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
+++ b/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
@@ -9,6 +9,7 @@
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
 use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
+use Drupal\migrate\Event\MigrateRollbackEvent;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\migrate\MigrateSkipRowException;
@@ -448,6 +449,32 @@ protected function getMigrateExecutable($migration) {
     return new MigrateExecutable($migration, $message, $event_dispatcher);
   }
 
+  /**
+   * @covers ::preRollback
+   */
+  public function testPreRollback() {
+    $this->migrationConfiguration['id'] = 'test_migration';
+    $plugin_id = 'test_migration';
+    $migration = $this->getMigration();
+
+    // Verify that preRollback() sets the high water mark to NULL.
+    $key_value = $this->createMock(KeyValueStoreInterface::class);
+    $key_value->expects($this->once())
+      ->method('set')
+      ->with($plugin_id, NULL);
+    $key_value_factory = $this->createMock(KeyValueFactoryInterface::class);
+    $key_value_factory->expects($this->once())
+      ->method('get')
+      ->with('migrate:high_water')
+      ->willReturn($key_value);
+    $container = new ContainerBuilder();
+    $container->set('keyvalue', $key_value_factory);
+    \Drupal::setContainer($container);
+
+    $source = new StubSourceGeneratorPlugin([], $plugin_id, [], $migration);
+    $source->preRollback(new MigrateRollbackEvent($migration));
+  }
+
 }
 
 /**
-- 
GitLab


From 608eee273680aac616fa47d1ed9ed906d3872de6 Mon Sep 17 00:00:00 2001
From: David Cameron <david@cadeyrn.us>
Date: Sat, 1 Mar 2025 20:05:29 -0600
Subject: [PATCH 2/2] Added test return type

---
 core/modules/migrate/tests/src/Unit/MigrateSourceTest.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php b/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
index 2fce7d434820..e344e3e23e84 100644
--- a/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
+++ b/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
@@ -452,7 +452,7 @@ protected function getMigrateExecutable($migration) {
   /**
    * @covers ::preRollback
    */
-  public function testPreRollback() {
+  public function testPreRollback(): void {
     $this->migrationConfiguration['id'] = 'test_migration';
     $plugin_id = 'test_migration';
     $migration = $this->getMigration();
-- 
GitLab