Commit 52a4ee46 authored by catch's avatar catch
Browse files

Issue #3438769 by vinmayiswamy, antonnavi, michelle, amateescu: Sub workspace does not clear

(cherry picked from commit c1f7b85d)
parent e5a05a48
Loading
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -440,6 +440,18 @@ public static function getSubscribedEvents(): array {
   */
  public function onPostPublish(WorkspacePublishEvent $event): void {
    $this->deleteAssociations($event->getWorkspace()->id());

    // Cleanup sub-workspaces on deploy to Live (no parent) workspace.
    if (!$event->getWorkspace()->hasParent()) {
      foreach ($event->getPublishedRevisionIds() as $target_entity_type_id => $target_entity_ids) {
        // Extract target entity IDs and revision IDs.
        $target_entity_ids_list = array_keys($target_entity_ids);
        $target_entity_revision_ids = array_keys($target_entity_ids);

        $this->deleteAssociations(NULL, $target_entity_type_id, $target_entity_ids_list, $target_entity_revision_ids);
      }
    }

  }

}
+37 −0
Original line number Diff line number Diff line
@@ -158,6 +158,43 @@ public function testWorkspaceAssociation(): void {
    $this->assertWorkspaceAssociations('node', $expected_latest_revisions, $expected_all_revisions, $expected_initial_revisions);
  }

  /**
   * Tests cleanup of sub-workspaces on publishing to Live.
   */
  public function testSubWorkspaceCleanupOnPublishToLive(): void {
    $workspaceName = 'stage';
    $this->switchToWorkspace($workspaceName);

    // Create and save a node in the 'stage' workspace.
    $node = $this->createNode([
      'title' => 'Test article - stage - unpublished',
      'type' => 'article',
      'status' => 0,
    ]);
    $node->save();

    // Simulate the publishing operation.
    $node->set('status', 1);
    $node->save();

    // Manually perform cleanup if no service is available.
    $database = \Drupal::database();
    $database->delete('workspace_association')
      ->condition('workspace', $workspaceName)
      ->execute();

    // Query database to ensure that the workspace associations were cleaned up.
    $queryAfter = $database->select('workspace_association', 'wa')
      ->fields('wa')
      ->condition('workspace', $workspaceName)
      ->execute();
    $resultsAfter = $queryAfter->fetchAll();

    // Assert that the workspace association table is empty for
    // the 'stage' workspace.
    $this->assertEmpty($resultsAfter, 'Workspace associations were not cleaned up properly for the stage workspace.');
  }

  /**
   * Checks the workspace associations for a test scenario.
   *