Browse Source

Merge pull request #20 from dannylamb/issue-445

AS2 Event Generator
pull/756/head
Diego Pino Navarro 8 years ago committed by GitHub
parent
commit
8553541b31
  1. 23
      .scripts/travis_setup.sh
  2. 4
      .travis.yml
  3. 2
      islandora/islandora.services.yml
  4. 60
      islandora/src/EventGenerator/EventGenerator.php
  5. 52
      islandora/src/EventGenerator/EventGeneratorInterface.php
  6. 152
      islandora/tests/src/Kernel/EventGeneratorTest.php

23
.scripts/travis_setup.sh

@ -3,16 +3,16 @@ mysql -u root -e 'create database drupal;'
mysql -u root -e "GRANT ALL PRIVILEGES ON drupal.* To 'drupal'@'localhost' IDENTIFIED BY 'drupal';" mysql -u root -e "GRANT ALL PRIVILEGES ON drupal.* To 'drupal'@'localhost' IDENTIFIED BY 'drupal';"
# Java (Oracle) # Java (Oracle)
sudo apt-get install -y software-properties-common #sudo apt-get install -y software-properties-common
sudo apt-get install -y python-software-properties #sudo apt-get install -y python-software-properties
sudo add-apt-repository -y ppa:webupd8team/java #sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update #sudo apt-get update
echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections #echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections #echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections
sudo apt-get install -y oracle-java8-installer #sudo apt-get install -y oracle-java8-installer
sudo update-java-alternatives -s java-8-oracle #sudo update-java-alternatives -s java-8-oracle
sudo apt-get install -y oracle-java8-set-default #sudo apt-get install -y oracle-java8-set-default
export JAVA_HOME=/usr/lib/jvm/java-8-oracle #export JAVA_HOME=/usr/lib/jvm/java-8-oracle
# phpcpd # phpcpd
#sudo apt-get install -y phpcpd #sudo apt-get install -y phpcpd
@ -46,6 +46,7 @@ drush en -y syslog
drush en -y serialization drush en -y serialization
drush en -y basic_auth drush en -y basic_auth
drush en -y rest drush en -y rest
drush en -y simpletest
drush dl rdfui --dev drush dl rdfui --dev
drush en -y rdfui drush en -y rdfui
@ -71,6 +72,8 @@ cd $HOME/drupal/modules
git clone https://github.com/DiegoPino/claw-jsonld.git git clone https://github.com/DiegoPino/claw-jsonld.git
drush en -y jsonld drush en -y jsonld
drush en -y islandora
drush -y dl bootstrap drush -y dl bootstrap
drush -y en bootstrap drush -y en bootstrap
drush -y config-set system.theme default bootstrap drush -y config-set system.theme default bootstrap

4
.travis.yml

@ -20,15 +20,17 @@ before_install:
- export ISLANDORA_DIR=$TRAVIS_BUILD_DIR - export ISLANDORA_DIR=$TRAVIS_BUILD_DIR
install: install:
# - $TRAVIS_BUILD_DIR/tests/scripts/travis_setup.sh - $TRAVIS_BUILD_DIR/.scripts/travis_setup.sh
- composer install - composer install
- php vendor/bin/phpcs --config-set installed_paths vendor/drupal/coder/coder_sniffer - php vendor/bin/phpcs --config-set installed_paths vendor/drupal/coder/coder_sniffer
script: script:
- $ISLANDORA_DIR/.scripts/line_endings.sh . - $ISLANDORA_DIR/.scripts/line_endings.sh .
- cd $HOME/drupal/modules/islandora
- php vendor/bin/phpcs --standard=Drupal **/*.module **/*.php --ignore=tests,vendor . - php vendor/bin/phpcs --standard=Drupal **/*.module **/*.php --ignore=tests,vendor .
- php vendor/bin/phpcpd --names *.module,*.inc,*.test,*.php --exclude=vendor . - php vendor/bin/phpcpd --names *.module,*.inc,*.test,*.php --exclude=vendor .
- cd $HOME/drupal; php core/scripts/run-tests.sh --php `which php` islandora
notifications: notifications:
irc: irc:

2
islandora/islandora.services.yml

@ -6,3 +6,5 @@ services:
tags: tags:
- { name: paramconverter } - { name: paramconverter }
arguments: ['@entity.manager'] 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(),
]);
}
}

52
islandora/src/EventGenerator/EventGeneratorInterface.php

@ -0,0 +1,52 @@
<?php
namespace Drupal\islandora\EventGenerator;
use Drupal\Core\Entity\EntityInterface;
use Drupal\user\UserInterface;
/**
* Inteface for a service that provides serialized event messages.
*/
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);
}

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

@ -0,0 +1,152 @@
<?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);
$this->assertBasicStructure($msg);
$this->assertTrue($msg["type"] == "Create", "Event type is 'Create'.");
}
/**
* Tests the generateUpdateEvent() method.
*/
public function testGenerateUpdateEvent() {
$json = $this->eventGenerator->generateUpdateEvent($this->entity, $this->user);
$msg = json_decode($json, TRUE);
$this->assertBasicStructure($msg);
$this->assertTrue($msg["type"] == "Update", "Event type is 'Update'.");
}
/**
* Tests the generateDeleteEvent() method.
*/
public function testGenerateDeleteEvent() {
$json = $this->eventGenerator->generateDeleteEvent($this->entity, $this->user);
$msg = json_decode($json, TRUE);
$this->assertBasicStructure($msg);
$this->assertTrue($msg["type"] == "Delete", "Event type is 'Delete'.");
}
/**
* Util function for repeated checks.
*
* @param array $msg
* The message parsed as an array.
*/
protected function assertBasicStructure(array $msg) {
// Looking for @context.
$this->assertTrue(array_key_exists('@context', $msg), "Context key exists");
$this->assertTrue($msg["@context"] == "https://www.w3.org/ns/activitystreams", "Context is activity stream.");
// Make sure it has a type.
$this->assertTrue(array_key_exists('type', $msg), "Type key exists");
// Make sure the actor exists, is a person, and has a uri.
$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");
// Make sure the object exists and is a 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