activitypub-1.0.x-dev/tests/src/Functional/MediaAttachmentTest.php
tests/src/Functional/MediaAttachmentTest.php
<?php namespace Drupal\Tests\activitypub\Functional; use Drupal\Core\Url; /** * Tests media attachment functionality. * * @group activitypub */ class MediaAttachmentTest extends ActivityPubTestBase { /** * {@inheritdoc} */ protected static $modules = [ 'field_ui', 'media', ]; /** * The authenticated user permissions. * * @var array */ protected $authenticatedUserPermissions = [ 'allow users to enable activitypub', 'administer nodes', 'bypass node access', 'access user profiles', 'view media', 'create media', ]; /** * Test media attachment. */ public function testMediaAttachment() { $assert_session = $this->assertSession(); $page = $this->getSession()->getPage(); $this->enableActivityPub($assert_session); $this->drupalLogout(); $outbox = Url::fromRoute('activitypub.outbox', ['user' => $this->authenticatedUserOne->id(), 'activitypub_actor' => $this->accountNameOne,], ['absolute' => TRUE])->toString(); $this->drupalLogin($this->authenticatedUserOne); // Add media. $this->drupalGet('/media/add/image'); $page->fillField('Name', 'Foobar'); $page->attachFileToField('Image', \Drupal::service('extension.list.module')->getPath('activitypub') . '/tests/fixtures/example.jpg'); $page->pressButton('Save'); // Create type. $mapping = ['field_media_image' => 'attachment']; $this->createType('Create', 'photo', 'Note', $mapping); // Add content. $this->drupalGet('node/add/photo'); $assert_session->statusCodeEquals(200); $assert_session->pageTextContains('ActivityPub outbox'); $edit = [ 'title[0][value]' => 'Photo one', 'body[0][value]' => 'Hello media world!', 'field_media_image[1]' => TRUE, 'activitypub_create' => 'map', ]; $this->submitForm($edit, 'Save'); $photo = $this->getNodeByTitle('Photo one'); $image_uri = $photo->field_media_image->entity->field_media_image->entity->getFileUri(); $image_url = $this->container->get('file_url_generator')->generateAbsoluteString($image_uri); // Check that media element and node content are ok. self::assertEquals(1, $photo->field_media_image->target_id); $assert_session->addressEquals('node/1'); $this->drupalGet('node/1/edit'); $assert_session->responseNotContains('activitypub_create'); $assert_session->responseContains('activitypub_update'); $this->drupalLogout(); $this->drupalGet($outbox); $content = json_decode($page->getContent()); $this->drupalGet($content->first); $content = json_decode($page->getContent()); $note = $content->orderedItems[0]->object; // Be sure the note attachment url is the same as media. self::assertEquals($image_url, $note->attachment[0]->url); } }