You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

153 lines
6.5 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
$relationlib = TikiLib::lib('relation');
class RelationTest extends TikiTestCase
{
protected function setUp(): void
{
parent::setUp();
TikiDb::get()->query('DELETE FROM `tiki_object_relations` WHERE `relation` LIKE ?', ['tiki.test%']);
}
protected function tearDown(): void
{
parent::tearDown();
TikiDb::get()->query('DELETE FROM `tiki_object_relations` WHERE `relation` LIKE ?', ['tiki.test%']);
}
public function testNoRelations(): void
{
$lib = new RelationLib();
$this->assertEquals([], $lib->get_relations_from('test wiki page', 'HomePage'));
}
public function testAddRelation(): void
{
$lib = new RelationLib();
$lib->add_relation('tiki.test.link', 'test wiki page', 'HomePage', 'test wiki page', 'SomePage');
$this->assertEquals(
[['relation' => 'tiki.test.link', 'type' => 'test wiki page', 'itemId' => 'SomePage']],
$this->removeId($lib->get_relations_from('test wiki page', 'HomePage'))
);
}
public function testDuplicateRelation(): void
{
$lib = new RelationLib();
$lib->add_relation('tiki.test.link', 'test wiki page', 'HomePage', 'test wiki page', 'SomePage');
$lib->add_relation('tiki.test.link', 'test wiki page', 'HomePage', 'test wiki page', 'SomePage');
$this->assertEquals(
[['relation' => 'tiki.test.link', 'type' => 'test wiki page', 'itemId' => 'SomePage']],
$this->removeId($lib->get_relations_from('test wiki page', 'HomePage'))
);
}
public function testMultipleResults(): void
{
$lib = new RelationLib();
$lib->add_relation('tiki.test.link', 'test wiki page', 'HomePage', 'test wiki page', 'SomePage');
$lib->add_relation('tiki.test.link', 'test wiki page', 'HomePage', 'test tracker item', '23');
$lib->add_relation('tiki.test.something', 'test wiki page', 'HomePage', 'test tracker item', '23');
$lib->add_relation('tiki.test.link', 'test tracker item', '23', 'test wiki page', 'SomePage');
$result = $this->removeId($lib->get_relations_from('test wiki page', 'HomePage'));
$this->assertContains(['relation' => 'tiki.test.link', 'type' => 'test wiki page', 'itemId' => 'SomePage'], $result);
$this->assertContains(['relation' => 'tiki.test.link', 'type' => 'test tracker item', 'itemId' => '23'], $result);
$this->assertContains(['relation' => 'tiki.test.something', 'type' => 'test tracker item', 'itemId' => '23'], $result);
}
public function testFilterByType(): void
{
$lib = new RelationLib();
$lib->add_relation('tiki.test.link', 'test wiki page', 'HomePage', 'test wiki page', 'SomePage');
$lib->add_relation('tiki.test.link', 'test wiki page', 'HomePage', 'test tracker item', '23');
$lib->add_relation('tiki.test.something', 'test wiki page', 'HomePage', 'test tracker item', '23');
$lib->add_relation('tiki.test.link', 'test tracker item', '23', 'test wiki page', 'SomePage');
$this->assertEquals(
[['relation' => 'tiki.test.something', 'type' => 'test tracker item', 'itemId' => '23'],],
$this->removeId($lib->get_relations_from('test wiki page', 'HomePage', 'tiki.test.something'))
);
}
public function testRelationNamesChecked(): void
{
$lib = new RelationLib();
$lib->add_relation('tiki.link', 'test wiki page', 'HomePage', 'test wiki page', 'SomePage');
$lib->add_relation('TIKI . test . link ', 'test wiki page', 'HomePage', 'test tracker item', '23');
$this->assertEquals(
[['relation' => 'tiki.test.link', 'type' => 'test tracker item', 'itemId' => '23'],],
$this->removeId($lib->get_relations_from('test wiki page', 'HomePage'))
);
}
public function testLoadGroupOfRelations(): void
{
$lib = new RelationLib();
$lib->add_relation('tiki.test.sem.related', 'test wiki page', 'HomePage', 'test wiki page', 'SomePage');
$lib->add_relation('tiki.test.sem.source', 'test wiki page', 'HomePage', 'test external', 'http://wikipedia.org');
$lib->add_relation('tiki.test.link', 'test wiki page', 'HomePage', 'test external', 'http://wikipedia.org');
$result = $this->removeId($lib->get_relations_from('test wiki page', 'HomePage', 'tiki.test.sem.'));
$this->assertContains(['relation' => 'tiki.test.sem.related', 'type' => 'test wiki page', 'itemId' => 'SomePage'], $result);
$this->assertContains(['relation' => 'tiki.test.sem.source', 'type' => 'test external', 'itemId' => 'http://wikipedia.org'], $result);
$this->assertNotContains(['relation' => 'tiki.test.link', 'type' => 'test external', 'itemId' => 'http://wikipedia.org'], $result);
}
public function testRevert(): void
{
$lib = new RelationLib();
$lib->add_relation('tiki.test.sem.related', 'test wiki page', 'HomePage', 'test wiki page', 'SomePage');
$lib->add_relation('tiki.test.sem.source', 'test wiki page', 'HomePage', 'test external', 'http://wikipedia.org');
$lib->add_relation('tiki.test.link', 'test wiki page', 'HomePage', 'test external', 'http://wikipedia.org');
$result = $this->removeId($lib->get_relations_to('test external', 'http://wikipedia.org', 'tiki.test.sem.'));
$this->assertEquals(
[['relation' => 'tiki.test.sem.source', 'type' => 'test wiki page', 'itemId' => 'HomePage']],
$result
);
}
public function testGetSingle(): void
{
$lib = new RelationLib();
$id = $lib->add_relation('tiki.test.sem.related', 'test wiki page', 'HomePage', 'test wiki page', 'SomePage');
$data = $lib->get_relation($id);
$this->assertEquals('tiki.test.sem.related', $data['relation']);
}
public function testRemoveSingle(): void
{
$lib = new RelationLib();
$id = $lib->add_relation('tiki.test.sem.related', 'test wiki page', 'HomePage', 'test wiki page', 'SomePage');
$lib->remove_relation($id);
$this->assertFalse($lib->get_relation($id));
}
private function removeId($data)
{
foreach ($data as & $row) {
unset($row['relationId']);
}
return $data;
}
}