From e6d855fb483a0a3ff09d5d966c76d1410947ea78 Mon Sep 17 00:00:00 2001 From: Steve Wirt Date: Thu, 12 Dec 2024 17:52:27 -0500 Subject: [PATCH] Add proper injection of HarvestRunRepository to HarvestPlanListBuilder. --- .../src/Entity/HarvestRunRepository.php | 2 +- .../harvest/src/HarvestPlanListBuilder.php | 22 ++++++++++--------- modules/harvest/src/HarvestService.php | 2 +- .../src/Kernel/HarvestPlanListBuilderTest.php | 3 +-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/modules/harvest/src/Entity/HarvestRunRepository.php b/modules/harvest/src/Entity/HarvestRunRepository.php index d5765c2776..165ea349f5 100644 --- a/modules/harvest/src/Entity/HarvestRunRepository.php +++ b/modules/harvest/src/Entity/HarvestRunRepository.php @@ -24,7 +24,7 @@ class HarvestRunRepository { * * @var \Drupal\Core\Entity\EntityStorageInterface */ - public EntityStorageInterface $runStorage; + protected EntityStorageInterface $runStorage; /** * Database connection service. diff --git a/modules/harvest/src/HarvestPlanListBuilder.php b/modules/harvest/src/HarvestPlanListBuilder.php index b3d6a8c44b..7096f7c2d0 100644 --- a/modules/harvest/src/HarvestPlanListBuilder.php +++ b/modules/harvest/src/HarvestPlanListBuilder.php @@ -4,6 +4,7 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityListBuilder; +use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Link; use Drupal\Core\Url; @@ -19,26 +20,26 @@ class HarvestPlanListBuilder extends EntityListBuilder { /** - * Harvest service. + * Harvest run repository service. * - * @var \Drupal\harvest\HarvestService + * @var \Drupal\harvest\Entity\HarvestRunRepository */ - protected HarvestService $harvestService; + protected HarvestRunRepository $harvestRunRepository; /** - * Harvest run repository service. + * Entity storage service for the harvest_run entity type. * - * @var \Drupal\harvest\Entity\HarvestRunRepository + * @var \Drupal\Core\Entity\EntityStorageInterface */ - protected HarvestRunRepository $harvestRunRepository; + protected EntityStorageInterface $harvestRunStorage; /** * {@inheritDoc} */ public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { $builder = parent::createInstance($container, $entity_type); - $builder->harvestService = $container->get('dkan.harvest.service'); $builder->harvestRunRepository = $container->get('dkan.harvest.storage.harvest_run_repository'); + $builder->harvestRunStorage = $container->get('entity_type.manager')->getStorage('harvest_run'); return $builder; } @@ -74,9 +75,10 @@ public function buildRow(EntityInterface $entity) { $harvest_plan_id = $entity->get('id')->getString(); $run_entity = NULL; - if ($run_id = $this->harvestService->runRepository->getLastHarvestRunId($harvest_plan_id)) { + if ($run_id = $this->harvestRunRepository->getLastHarvestRunId($harvest_plan_id)) { // There is a run identifier, so we should get that info. - $run_entity = $this->harvestRunRepository->runStorage->load($run_id); + /** @var \Drupal\harvest\HarvestRunInterface $run_entity */ + $run_entity = $this->harvestRunStorage->load($run_id); } // Default values for a row if there's no info. @@ -100,7 +102,7 @@ public function buildRow(EntityInterface $entity) { 'data' => $extract_status, 'class' => strtolower($extract_status), ]; - $row['last_run'] = date('m/d/y H:m:s T', $run_id); + $row['last_run'] = date('m/d/y H:m:s T', $run_entity->get('timestamp')->value); $row['dataset_count'] = $interpreter->countProcessed(); } // Don't call parent::buildRow() because we don't want operations (yet). diff --git a/modules/harvest/src/HarvestService.php b/modules/harvest/src/HarvestService.php index 04d93312d4..7fc1f98827 100644 --- a/modules/harvest/src/HarvestService.php +++ b/modules/harvest/src/HarvestService.php @@ -217,7 +217,7 @@ public function runHarvest($plan_id) { $result['status']['orphan_ids'] = $this->getOrphanIdsFromResult($plan_id, $result['status']['extracted_items_ids']); $this->processOrphanIds($result['status']['orphan_ids']); - + // For legacy reasons, the identifier is the timestamp. $result['identifier'] = $timestamp; $this->runRepository->storeRun($result, $plan_id, $timestamp); diff --git a/modules/harvest/tests/src/Kernel/HarvestPlanListBuilderTest.php b/modules/harvest/tests/src/Kernel/HarvestPlanListBuilderTest.php index d2cddc790d..e3a96e30be 100644 --- a/modules/harvest/tests/src/Kernel/HarvestPlanListBuilderTest.php +++ b/modules/harvest/tests/src/Kernel/HarvestPlanListBuilderTest.php @@ -101,7 +101,6 @@ public function testGoodHarvestRun() { $this->registerHarvestPlan($harvest_service, $plan_id); $run_result = $harvest_service->runHarvest($plan_id); $this->assertEquals('SUCCESS', $run_result['status']['extract'] ?? 'not_a_successful_run'); - $run_id = $harvest_service->runRepository->getLastHarvestRunId($plan_id); $response = $list_builder->render(); @@ -109,7 +108,7 @@ public function testGoodHarvestRun() { $strings = array_merge(self::HARVEST_HEADERS, [ 'harvest_link', 'SUCCESS', - json_encode(date('m/d/y H:m:s T', $run_id)), + json_encode(date('m/d/y H:m:s T', $run_result['identifier'])), '2', ]); foreach ($strings as $string) {