<?php /* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* # ***** BEGIN LICENSE BLOCK ***** # This file is part of Plume CMS, a website management application. # Copyright (C) 2001-2007 Loic d'Anterroches and contributors. # # Plume CMS is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # Plume CMS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # ***** END LICENSE BLOCK ***** */ error_reporting(E_ALL | E_STRICT); $path = dirname(__FILE__).'/../../src/'; set_include_path(get_include_path().PATH_SEPARATOR.$path); require_once 'PHPUnit/Framework/TestCase.php'; require_once 'PHPUnit/Framework/IncompleteTestError.php'; require_once 'Pluf.php'; include_once dirname(__FILE__).'/TestModels.php'; class PlufModelTest extends PHPUnit_Framework_TestCase { protected function setUp() { Pluf::start(dirname(__FILE__).'/../conf/pluf.config.php'); $m = require dirname(__FILE__).'/relations.php'; $GLOBALS['_PX_models'] = array_merge($m, $GLOBALS['_PX_models']); $GLOBALS['_PX_config']['pluf_use_rowpermission'] = false; $db = Pluf::db(); $schema = Pluf::factory('Pluf_DB_Schema', $db); $m1 = new TestModel(); $m2 = new RelatedToTestModel(); $m3 = new RelatedToTestModel2(); $m4 = new TestModelRecurse(); $schema->model = $m1; $schema->dropTables(); $schema->createTables(); $schema->model = $m2; $schema->dropTables(); $schema->createTables(); $schema->model = $m3; $schema->dropTables(); $schema->createTables(); $schema->model = $m4; $schema->dropTables(); $schema->createTables(); } protected function tearDown() { $db = Pluf::db(); $schema = Pluf::factory('Pluf_DB_Schema', $db); $m1 = new TestModel(); $schema->model = $m1; $schema->dropTables(); $m2 = new RelatedToTestModel(); $schema->model = $m2; $schema->dropTables(); $m3 = new RelatedToTestModel2(); $schema->model = $m3; $schema->dropTables(); $m4 = new TestModelRecurse(); $schema->model = $m4; $schema->dropTables(); } public function testSetModelField() { $model = new TestModel(); $model->title = 'myvalue'; $this->assertEquals('myvalue', $model->title); } public function testTestModelRecurse() { $model = new TestModelRecurse(); $model->title = 'myvalue'; $this->assertEquals('myvalue', $model->title); $model->create(); $model2 = new TestModelRecurse(); $model2->title = 'child'; $model2->parentid = $model; $this->assertEquals(true, $model2->create()); $a = $model->get_children_list(); $this->assertEquals($a[0]->title, 'child'); } public function testCreateTestModel() { $model = new TestModel(); $model->title = 'my title'; $model->description = 'A small desc.'; $this->assertEquals(true, $model->create()); $this->assertEquals(1, (int) $model->id); } public function testGetTestModel() { $model = new TestModel(); $model->title = 'my title'; $model->description = 'A small desc.'; $model->create(); $m = new TestModel(1); $this->assertEquals('my title', $m->title); } public function testUpdateTestModel() { $model = new TestModel(); $model->title = 'my title'; $model->description = 'A small desc.'; $model->create(); $model = new TestModel(1); $model->description = 'A small desc 2.'; $this->assertEquals(true, $model->update()); $this->assertEquals('A small desc 2.', $model->description); } public function testDeleteTestModel() { $model = new TestModel(); $model->title = 'my title'; $model->description = 'A small desc.'; $model->create(); $this->assertEquals(1, $model->id); $this->assertEquals(true, $model->delete()); $this->assertEquals('', $model->id); $this->assertEquals('', $model->title); $model = new TestModel(); $this->assertEquals(false, $model->get(1)); } public function testGetListTestModel() { for ($i=0; $i<10; $i++) { $model = new TestModel(); $model->title = 'title '.$i; $model->description = 'A small desc '.$i; $model->create(); } $model->title = 'update to have 11 records and 10 head'; $model->update(); $m = new TestModel(); $models = $m->getList(); $this->assertEquals(10, count($models)); $this->assertEquals('title 0', $models[0]->title); $this->assertEquals('title 5', $models[5]->title); } public function testGetCountModel() { for ($i=0; $i<10; $i++) { $model = new TestModel(); $model->title = 'title '.$i; $model->description = 'A small desc '.$i; $model->create(); } $model->title = 'update to have 11 records and 10 head'; $model->update(); $m = new TestModel(); $this->assertEquals(10, $m->getCount()); } public function testRelatedTestModel() { $model = new TestModel(); $model->title = 'title'; $model->description = 'A small desc '; $this->assertEquals(true, $model->create()); $m = new RelatedToTestModel(); $m->testmodel = $model; $m->dummy = 'stupid values'; $this->assertEquals(true, $m->create()); $rel = $model->get_relatedtotestmodel_list(); $this->assertEquals('stupid values', $rel[0]->dummy); $mod = $m->get_testmodel(); $this->assertEquals('title', $mod->title); } public function testLimitRelatedTestModel() { $model = new TestModel(); $model->title = 'title'; $model->description = 'A small desc '; $this->assertEquals(true, $model->create()); $m = new RelatedToTestModel(); $m->testmodel = $model; $m->dummy = 'stupid values'; $this->assertEquals(true, $m->create()); $m = new RelatedToTestModel(); $m->testmodel = $model; $m->dummy = 'stupid values 2'; $this->assertEquals(true, $m->create()); $m = new RelatedToTestModel(); $m->testmodel = $model; $m->dummy = 'stupid values 3'; $this->assertEquals(true, $m->create()); $rel = $model->get_relatedtotestmodel_list(array('filter' => "dummy='stupid values 2'")); $this->assertEquals('stupid values 2', $rel[0]->dummy); $this->assertEquals(1, count($rel)); $rel = $model->get_relatedtotestmodel_list(); $this->assertEquals(3, count($rel)); } /** * Test if the delete() call on a model is deleting the model * related through a foreignkey. */ public function testDeleteRelatedModels() { $model = new TestModel(); $model->title = 'title'; $model->description = 'A small desc '; $model->create(); $m1 = new RelatedToTestModel(); $m1->testmodel = $model; $m1->dummy = 'stupid values'; $m1->create(); $m2 = new RelatedToTestModel(); $m2->testmodel = $model; $m2->dummy = 'stupid values'; $m2->create(); $m3 = new RelatedToTestModel(); $m3->testmodel = $model; $m3->dummy = 'stupid values'; $m3->create(); $rel = $model->get_relatedtotestmodel_list(); $this->assertEquals(3, count($rel)); $this->assertEquals(0, count($m2->getDeleteSideEffect())); $m2->delete(); $rel = $model->get_relatedtotestmodel_list(); $this->assertEquals(2, count($rel)); $this->assertEquals(2, count($model->getDeleteSideEffect())); $model->delete(); $mr = new RelatedToTestModel(); $rel = $mr->getList(); $this->assertEquals(0, count($rel)); } public function testManyRelatedTestModel() { $tm1 = new TestModel(); $tm1->title = 'title tm1'; $tm1->description = 'A small desc tm1'; $tm1->create(); $tm2 = new TestModel(); $tm2->title = 'title tm2'; $tm2->description = 'A small desc tm2'; $tm2->create(); $tm3 = new TestModel(); $tm3->title = 'title tm3'; $tm3->description = 'A small desc tm3'; $tm3->create(); $rm1 = new RelatedToTestModel2(); $rm1->testmodel_1 = $tm1; $rm1->testmodel_2 = $tm2; $rm1->dummy = 'stupid values rm1'; $rm1->create(); $rm2 = new RelatedToTestModel2(); $rm2->testmodel_1 = $tm1; $rm2->testmodel_2 = $tm2; $rm2->dummy = 'stupid values rm2'; $rm2->create(); $rm3 = new RelatedToTestModel2(); $rm3->testmodel_1 = $tm1; $rm3->testmodel_2 = $tm3; $rm3->dummy = 'stupid values rm3'; $rm3->create(); $rel = $tm1->get_first_rttm_list(); $this->assertEquals(3, count($rel)); $this->assertEquals('stupid values rm1', $rel[0]->dummy); $rel = $tm2->get_first_rttm_list(); $this->assertEquals(0, count($rel)); $rel = $tm2->get_second_rttm_list(); $this->assertEquals(2, count($rel)); $this->assertEquals('stupid values rm2', $rel[1]->dummy); $rel = $tm3->get_second_rttm_list(); $this->assertEquals(1, count($rel)); $this->assertEquals('stupid values rm3', $rel[0]->dummy); $tm1bis = $rm2->get_testmodel_1(); $this->assertEquals('title tm1', $tm1bis->title); } public function testRelatedToNotCreatedTestModel() { $db = Pluf::db(); $schema = Pluf::factory('Pluf_DB_Schema', $db); $m2 = new ManyToManyTwo(); $schema->model = $m2; $this->assertEquals(true, $schema->dropTables()); $this->assertEquals(true, $schema->createTables()); $m2->two = 'two is the best'; $rel = $m2->get_manytomanyone_list(); $this->assertNotEquals(false, $rel); $this->assertEquals(0, count($rel)); $this->assertEquals(true, $schema->dropTables()); } /** * Create the tables and test if association is working. */ public function testManyToManyModels() { $db = Pluf::db(); $schema = Pluf::factory('Pluf_DB_Schema', $db); $m1 = new ManyToManyOne(); $schema->model = $m1; $this->assertEquals(true, $schema->dropTables()); $this->assertEquals(true, $schema->createTables()); $m1->one = 'one is the best'; $this->assertEquals(true, $m1->create()); $this->assertEquals(1, $m1->id); $m2 = new ManyToManyTwo(); $schema->model = $m2; $this->assertEquals(true, $schema->dropTables()); $this->assertEquals(true, $schema->createTables()); $m2->two = 'two is the best'; $this->assertEquals(true, $m2->create()); $m1->setAssoc($m2); $m3 = new ManyToManyTwo(); $m3->two = 'two bis is the best'; $this->assertEquals(true, $m3->create()); $m1->setAssoc($m3); $rel = $m1->get_two_list(); $this->assertEquals(2, count($rel)); $this->assertEquals('two is the best', $rel[0]->two); $this->assertEquals('two bis is the best', $rel[1]->two); //Has the many to many relationship is set on ManyToManyOne //ManyToManyTwo is accessing the other model through the //get_nameofthemodelclass_list syntax $rel = $m2->get_manytomanyone_list(); $this->assertEquals(1, count($rel)); $this->assertEquals('one is the best', $rel[0]->one); $m1->delAssoc($m3); $rel = $m1->get_two_list(); $this->assertEquals(1, count($rel)); } public function testExceptionOnProperty() { $model = new TestModel(); $model->title = 'title'; $model->description = 'A small desc '; $this->assertEquals(true, $model->create()); try { $rel = $model->should_fail; // next line should not be called $this->assertEquals(true, false); } catch (Exception $e) { $this->assertEquals('Cannot get property "should_fail".', $e->getMessage()); } } } ?>