Browse Source

First pass at AS2 event generator

pull/756/head
Danny Lamb 8 years ago
parent
commit
644afe0b0e
  1. 2
      islandora/islandora.services.yml
  2. 60
      islandora/src/EventGenerator/EventGenerator.php
  3. 48
      islandora/src/EventGenerator/EventGeneratorInterface.php
  4. 164
      islandora/tests/src/Kernel/EventGeneratorTest.php

2
islandora/islandora.services.yml

@ -6,3 +6,5 @@ services:
tags:
- { name: paramconverter }
arguments: ['@entity.manager']
islandora.eventgenerator:
class: Drupal\islandora\EventGenerator\EventGenerator

60
islandora/src/EventGenerator/EventGenerator.php

@ -0,0 +1,60 @@
<?php
namespace Drupal\islandora\EventGenerator;
use Drupal\Core\Entity\EntityInterface;
use Drupal\user\UserInterface;
/**
* The default EventGenerator implementation.
*
* Provides Activity Stream 2.0 serialized events.
*/
class EventGenerator implements EventGeneratorInterface {
/**
* {@inheritdoc}
*/
public function generateCreateEvent(EntityInterface $entity, UserInterface $user) {
return json_encode([
"@context" => "https://www.w3.org/ns/activitystreams",
"type" => "Create",
"actor" => [
"type" => "Person",
"id" => $user->toUrl()->setAbsolute()->toString(),
],
"object" => $entity->toUrl()->setAbsolute()->toString(),
]);
}
/**
* {@inheritdoc}
*/
public function generateUpdateEvent(EntityInterface $entity, UserInterface $user) {
return json_encode([
"@context" => "https://www.w3.org/ns/activitystreams",
"type" => "Update",
"actor" => [
"type" => "Person",
"id" => $user->toUrl()->setAbsolute()->toString(),
],
"object" => $entity->toUrl()->setAbsolute()->toString(),
]);
}
/**
* {@inheritdoc}
*/
public function generateDeleteEvent(EntityInterface $entity, UserInterface $user) {
return json_encode([
"@context" => "https://www.w3.org/ns/activitystreams",
"type" => "Delete",
"actor" => [
"type" => "Person",
"id" => $user->toUrl()->setAbsolute()->toString(),
],
"object" => $entity->toUrl()->setAbsolute()->toString(),
]);
}
}

48
islandora/src/EventGenerator/EventGeneratorInterface.php

@ -0,0 +1,48 @@
<?php
namespace Drupal\islandora\EventGenerator;
use Drupal\Core\Entity\EntityInterface;
use Drupal\user\UserInterface;
interface EventGeneratorInterface {
/**
* Generates a serialized 'Create' event.
*
* @param \Drupal\Core\Entity\EntityInterface $entity
* The entity that was created.
* @param \Drupal\user\UserInterface $user
* The user who created the entity.
*
* @return string
* Serialized event message
*/
public function generateCreateEvent(EntityInterface $entity, UserInterface $user);
/**
* Generates a serialized 'Create' event.
*
* @param \Drupal\Core\Entity\EntityInterface $entity
* The entity that was updated.
* @param \Drupal\user\UserInterface $user
* The user who updated the entity.
*
* @return string
* Serialized event message
*/
public function generateUpdateEvent(EntityInterface $entity, UserInterface $user);
/**
* Generates a serialized 'Create' event.
*
* @param \Drupal\Core\Entity\EntityInterface $entity
* The entity that was deleted.
* @param \Drupal\user\UserInterface $user
* The user who deleted the entity.
*
* @return string
* Serialized event message
*/
public function generateDeleteEvent(EntityInterface $entity, UserInterface $user);
}

164
islandora/tests/src/Kernel/EventGeneratorTest.php

@ -0,0 +1,164 @@
<?php
namespace Drupal\Tests\islandora\Kernel;
use Drupal\islandora\Entity\FedoraResource;
use Drupal\islandora\EventGenerator\EventGenerator;
use Drupal\KernelTests\KernelTestBase;
use Drupal\simpletest\UserCreationTrait;
/**
* Tests the EventGenerator default implementation.
*
* @group islandora
*/
class EventGeneratorTest extends KernelTestBase {
use UserCreationTrait {
createUser as drupalCreateUser;
}
/**
* User entity.
*
* @var \Drupal\user\UserInterface
*/
protected $user;
/**
* Fedora resource entity.
*
* @var \Drupal\islandora\FedoraResourceInterface
*/
protected $entity;
/**
* The EventGenerator to test.
*
* @var \Drupal\islandora\EventGenerator\EventGeneratorInterface
*/
protected $eventGenerator;
/**
* {@inheritdoc}
*/
public static $modules = [
'system',
'user',
'field',
'filter',
'block',
'node',
'path',
'text',
'options',
'inline_entity_form',
'serialization',
'rest',
'rdf',
'jsonld',
'islandora'
];
/**
* {@inheritdoc}
*/
public function setUp() {
parent::setUp();
// Bootstrap minimal Drupal environment to run the tests.
$this->installSchema('system', 'sequences');
$this->installEntitySchema('user');
$this->installConfig('filter');
$this->installEntitySchema('fedora_resource');
// Create a test user.
$this->user = $this->drupalCreateUser();
// Create a test entity.
$this->entity = FedoraResource::create([
"type" => "rdf_source",
"uid" => 1,
"name" => "Test Fixture",
"langcode" => "und",
"status" => 1,
]);
$this->entity->save();
// Create the event generator so we can test it.
$this->eventGenerator = new EventGenerator();
}
/**
* Tests the generateCreateEvent() method.
*/
public function testGenerateCreateEvent() {
$json = $this->eventGenerator->generateCreateEvent($this->entity, $this->user);
$msg = json_decode($json, TRUE);
// Assert basic message structure.
$this->assertTrue(array_key_exists('@context', $msg), "Context key exists");
$this->assertTrue($msg["@context"] == "https://www.w3.org/ns/activitystreams", "Context is activity stream.");
$this->assertTrue(array_key_exists('type', $msg), "Type key exists");
$this->assertTrue($msg["type"] == "Create", "Event type is 'Create'.");
$this->assertTrue(array_key_exists('actor', $msg), "Actor key exists");
$this->assertTrue(array_key_exists("type", $msg["actor"]), "Type key exists for actor.");
$this->assertTrue($msg["actor"]["type"] == "Person", "Actor is a person.");
$this->assertTrue(array_key_exists("id", $msg["actor"]), "Id key exists for actor.");
$this->assertTrue($msg["actor"]["id"] == $this->user->toUrl()->setAbsolute()->toString(), "Id is user's uri");
$this->assertTrue(array_key_exists('object', $msg), "Object key exists");
$this->assertTrue($msg["object"] == $this->entity->toUrl()->setAbsolute()->toString(), "Object is entity uri.");
}
/**
* Tests the generateUpdateEvent() method.
*/
public function testGenerateUpdateEvent() {
$json = $this->eventGenerator->generateUpdateEvent($this->entity, $this->user);
$msg = json_decode($json, TRUE);
// Assert basic message structure.
$this->assertTrue(array_key_exists('@context', $msg), "Context key exists");
$this->assertTrue($msg["@context"] == "https://www.w3.org/ns/activitystreams", "Context is activity stream.");
$this->assertTrue(array_key_exists('type', $msg), "Type key exists");
$this->assertTrue($msg["type"] == "Update", "Event type is 'Update'.");
$this->assertTrue(array_key_exists('actor', $msg), "Actor key exists");
$this->assertTrue(array_key_exists("type", $msg["actor"]), "Type key exists for actor.");
$this->assertTrue($msg["actor"]["type"] == "Person", "Actor is a person.");
$this->assertTrue(array_key_exists("id", $msg["actor"]), "Id key exists for actor.");
$this->assertTrue($msg["actor"]["id"] == $this->user->toUrl()->setAbsolute()->toString(), "Id is user's uri");
$this->assertTrue(array_key_exists('object', $msg), "Object key exists");
$this->assertTrue($msg["object"] == $this->entity->toUrl()->setAbsolute()->toString(), "Object is entity uri.");
}
/**
* Tests the generateDeleteEvent() method.
*/
public function testGenerateDeleteEvent() {
$json = $this->eventGenerator->generateDeleteEvent($this->entity, $this->user);
$msg = json_decode($json, TRUE);
// Assert basic message structure.
$this->assertTrue(array_key_exists('@context', $msg), "Context key exists");
$this->assertTrue($msg["@context"] == "https://www.w3.org/ns/activitystreams", "Context is activity stream.");
$this->assertTrue(array_key_exists('type', $msg), "Type key exists");
$this->assertTrue($msg["type"] == "Delete", "Event type is 'Delete'.");
$this->assertTrue(array_key_exists('actor', $msg), "Actor key exists");
$this->assertTrue(array_key_exists("type", $msg["actor"]), "Type key exists for actor.");
$this->assertTrue($msg["actor"]["type"] == "Person", "Actor is a person.");
$this->assertTrue(array_key_exists("id", $msg["actor"]), "Id key exists for actor.");
$this->assertTrue($msg["actor"]["id"] == $this->user->toUrl()->setAbsolute()->toString(), "Id is user's uri");
$this->assertTrue(array_key_exists('object', $msg), "Object key exists");
$this->assertTrue($msg["object"] == $this->entity->toUrl()->setAbsolute()->toString(), "Object is entity uri.");
}
}
Loading…
Cancel
Save