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); } }