<?php

namespace ActivityPhpTest\Server;

use ActivityPhpTest\MyCustomOntology;
use ActivityPhp\Server;
use ActivityPhp\Type;
use ActivityPhp\Type\Ontology;
use Exception;
use PHPUnit\Framework\TestCase;

class ServerOntologyTest extends TestCase
{
	/**
	 * Check that an ontology can be define from server configuration
	 */
	public function testOntologyServerLoading()
	{
		$ontologies = [
		    'peertube'
		];

		$server = new Server([
		    'ontologies' => $ontologies,
		    'logger'    => [
		       'driver' => '\Psr\Log\NullLogger'
		    ],
		    'cache' => [
		        'enabled' => false,
		    ]
		]);

		$person = Type::create('Person', ['playlists' => 'bob']);

		$this->assertEquals(
		    'bob',
		    $person->getPlaylists()
		);

		Ontology::clear();
	}


	/**
	 * Add a new ontology
	 */
	public function testAddCustomOntology()
	{
		$ontologies = [
		    'custom-ontology' => MyCustomOntology::class,
		];

		$server = new Server([
		    'ontologies' => $ontologies,
		    'logger'    => [
		       'driver' => '\Psr\Log\NullLogger'
		    ],
		    'cache' => [
		        'enabled' => false,
		    ]
		]);

		$person = Type::create('Person', ['myOntologyField' => 'bob']);

		$this->assertEquals(
		    'bob',
		    $person->myOntologyField
		);

		Ontology::clear();
	}


	/**
	 * Check that an ontology can be define from server configuration
	 */
	public function testLoadAllOntologiesServerLoading()
	{
		$ontologies = [
		    '*'
		];

		$server = new Server([
		    'ontologies' => $ontologies,
		    'logger'    => [
		       'driver' => '\Psr\Log\NullLogger'
		    ],
		    'cache' => [
		        'enabled' => false,
		    ]
		]);

		$person = Type::create('Person', ['playlists' => 'bob']);

		$this->assertEquals(
		    'bob',
		    $person->getPlaylists()
		);

		Ontology::clear();
	}


	/**
	 * Try to load an undefined ontology
	 */
	public function testLoadUndefinedOntologyLoading()
	{
		$this->expectException(Exception::class);

		$ontologies = [
		    'undefined'
		];

		$server = new Server([
		    'ontologies' => $ontologies,
		    'logger'    => [
		       'driver' => '\Psr\Log\NullLogger'
		    ],
		    'cache' => [
		        'enabled' => false,
		    ]
		]);
	}
}
__halt_compiler();----SIGNATURE:----I4Sv/apqpU7axWrs7ggXZYObUIdaYk48ZUfCKrWNo5UirUroOv03CsCjWXDupGWjkCTVetH8FSz+Yag3Q2uxzqQw1zEpgnwuCQGqTO98HH1IzUxTYqK7YuZSTjuWIztHKXpMlcZu3EHBfc4+7Lc+qqeaa8WBajm690gz0dBY6RTI/3SwLupnFCZBLuJ+57eX54qbyOvJZ0kw2zeius4l/G7PcRv4hcTUrgzRgvRUcpRjx1B+l3KPzRYt0t5qRuQdo7hp+ob73hJD/SaJjV28oIuPMZHVIaFSucFPC4Qh9GEzxa+p93l3UjfUSjfC/AQBG+5VzRQQCGyC25UqXMNx4uVkqbLyeWsRuCNOxhKRmyw4/SA3ZXho4PplMbN9ACtaXJiHLheFGgGN+6s5RC1/mxjZnYAyQGhA7aoTnkphP6zHNcJb7UmZTyMRHsw27JPhHYrVk7+kcKlRlXrLyHZnids6MKUNt4IIsIGwL19HCp78QKOuZGnWIQi6YgnvFhoABTEJKwn4gnr25EJiP1kydETus7LJG44NyZhaA84CGl33dXKA0NwXc1B8gFDxmIq3SeQSTndfZjeJi71m5f2g5W1Z00hcuZCKKkdkMSAC//NH01Gcr++cr5FZK+2vegfAfAcJqxO8n1qGdgSDZCAS2heb++TFtdESs80gyR6GN9M=----ATTACHMENT:----NTY1ODIzODE2ODI3OTU0NyA2MjU5NTM1Mjc0NzMzOTc3IDg2MTEzNDIxNzcwMzUwNTc=