activitypub-1.0.x-dev/tests/src/Kernel/ActivityTests.php

tests/src/Kernel/ActivityTests.php
<?php

namespace Drupal\Tests\activitypub\Kernel;

use Drupal\activitypub\Entity\ActivityPubActivityInterface;
use Drupal\Core\Url;
use Drupal\KernelTests\KernelTestBase;

/**
 * Tests activities.
 *
 * @group activitypub
 */
class ActivityTests extends KernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'system',
    'user',
    'activitypub',
    'activitypub_test',
    'image',
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->installEntitySchema('user');
    $this->installEntitySchema('activitypub_activity');
    $this->installEntitySchema('activitypub_actor');
    $this->installConfig(['activitypub', 'activitypub_test']);
  }

  /**
   * Tests audience.
   */
  public function testAudience() {
    $account = \Drupal::entityTypeManager()->getStorage('user')->create(['mail' => 'test@cample.com', 'name' => 'User']);
    $account->save();

    $actor_values = ['entity_id' => $account->id(), 'type' => 'person', 'status' => 1, 'name' => 'Test'];
    $actor = \Drupal::entityTypeManager()->getStorage('activitypub_actor')->create($actor_values);
    $actor->save();
    $followers_url = Url::fromRoute('activitypub.followers', ['user' => $actor->getOwnerId(), 'activitypub_actor' => $actor->getName()], ['absolute' => TRUE])->toString();

    $values = [
      'uid' => $account->id(),
      'type' => 'Create',
      'config_id' => 'test_type',
      'collection' => ActivityPubActivityInterface::OUTBOX,
      'visibility' => ActivityPubActivityInterface::VISIBILITY_PUBLIC,
    ];

    /** @var \Drupal\activitypub\Entity\ActivityPubActivityInterface $activity */
    $activity = \Drupal::entityTypeManager()->getStorage('activitypub_activity')->create($values);

    // Public.
    $build = $activity->buildActivity();
    self::assertEquals([ActivityPubActivityInterface::PUBLIC_URL], $build['to']);
    self::assertEquals([$followers_url], $build['cc']);

    // Followers.
    $activity->setFollowers();
    $build = $activity->buildActivity();
    self::assertEquals([$followers_url], $build['to']);
    self::assertEquals([], $build['cc']);

    // Unlisted.
    $activity->setUnlisted();
    $build = $activity->buildActivity();
    self::assertEquals([], $build['to']);
    self::assertEquals([], $build['cc']);

    // Private.
    $activity->setPrivate();
    $activity->setTo(ACTIVITYPUB_TEST_USER);
    $build = $activity->buildActivity();
    self::assertEquals([ACTIVITYPUB_TEST_USER], $build['to']);
    self::assertEquals([], $build['cc']);
    self::assertEquals(ACTIVITYPUB_TEST_USER, $build['object']['tag'][0]->href);
    self::assertEquals('@random@example.com', $build['object']['tag'][0]->name);
  }

  /**
   * Tests removing old activities.
   */
  public function testRemoveOldActivities() {

    /** @var \Drupal\activitypub\Entity\Storage\ActivityPubActivityStorageInterface $storage */
    $storage = \Drupal::entityTypeManager()->getStorage('activitypub_activity');

    /** @var \Drupal\activitypub\Services\ActivityPubProcessClientInterface $client */
    $client = \Drupal::service('activitypub.process.client');

    $config = \Drupal::configFactory()->getEditable('activitypub.settings');

    // Create a bunch of activities.
    // Note: Follow inbox generates an outbox Accept automatically.
    // We also skip the Follow and outbox.
    $types = [
      'Create', 'Like', 'Announce', 'Follow',
    ];

    foreach ($types as $type) {
      $amount = 5;
      $days = 4;
      while ($amount != 0) {
        $time = strtotime("today - $days days");
        foreach ([ActivityPubActivityInterface::INBOX, ActivityPubActivityInterface::OUTBOX] as $collection) {

          // Don't create outbox Follow activities.
          if ($collection == ActivityPubActivityInterface::OUTBOX && $type == 'Follow') {
            continue;
          }

          $values = [
            'uid' => 1,
            'type' => $type,
            'external_id' => $this->randomMachineName(20),
            'actor' => $this->randomMachineName(20),
            'collection' => $collection,
            'visibility' => ActivityPubActivityInterface::VISIBILITY_PUBLIC,
          ];

          $activity = $storage->create($values);
          $activity->set('created', $time);
          $activity->save();

          // Create 'notifications' too.
          if ($collection == ActivityPubActivityInterface::INBOX && in_array($type, ['Like', 'Announce']) && $days > 12) {
            $activity = $storage->create($values);
            $activity->set('external_id', $this->randomMachineName(20));
            $activity->set('entity_id', 10);
            $activity->set('created', $time);
            $activity->save();
          }

        }
        $amount--;
        $days += 4;
      }
    }

    $count = $storage->getActivityCount();
    self::assertEquals(44, $count);
    $client->removeOldActivities();
    $count = $storage->getActivityCount();
    self::assertEquals(44, $count);
    $config->set('inbox_remove_x_days', 17)->save();
    $client->removeOldActivities();
    $count = $storage->getActivityCount();
    self::assertEquals(41, $count);
    $config->set('inbox_remove_x_days', 11)->save();
    $client->removeOldActivities();
    $count = $storage->getActivityCount();
    self::assertEquals(35, $count);

  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc