Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > d64fb4145777a3be1019c03196c86eb0 > files > 130

php-pluf-0.1-3mdv2010.0.noarch.rpm

<?php
/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
# ***** BEGIN LICENSE BLOCK *****
# This file is part of Plume Framework, a simple PHP Application Framework.
# Copyright (C) 2001-2007 Loic d'Anterroches and contributors.
#
# Plume Framework is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Plume Framework 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser 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';

class PlufUserTest extends PHPUnit_Framework_TestCase {
    
    protected function setUp()
    {
        Pluf::start(dirname(__FILE__).'/../conf/pluf.config.php');
        $db = Pluf::db();
        $schema = Pluf::factory('Pluf_DB_Schema', $db);
        $models = array('Pluf_Group', 'Pluf_User', 'Pluf_Permission',
                        'Pluf_Message', 'Pluf_RowPermission');
        foreach ($models as $model) {
            $schema->model = Pluf::factory($model);
            $schema->dropTables();
            if (true !== ($res = $schema->createTables())) {
                throw new Exception($res);
            }
        }
        $perms = array();
        for ($i=1; $i<=10; $i++) {
            $perm = new Pluf_Permission();
            $perm->application = 'DummyModel';
            $perm->code_name = 'code-'.$i;
            $perm->name = 'code-'.$i;
            $perm->description = 'code-'.$i;
            $perm->create();
            $perms[] = clone($perm);
        }
        $groups = array();
        for ($i=1; $i<=10; $i++) {
            $group = new Pluf_Group();
            $group->name = 'Group '.$i;
            $group->description = 'Group '.$i;
            $group->create();
            $groups[] = clone($group);
        }
        $groups[0]->setAssoc($perms[0]);
        $groups[0]->setAssoc($perms[1]);
        $groups[0]->setAssoc($perms[2]);
        $groups[0]->setAssoc($perms[3]);
        $groups[1]->setAssoc($perms[0]); //again perm "1"
        $groups[0]->setAssoc($perms[4]);
        $groups[0]->setAssoc($perms[5]);
        $user = new Pluf_User();
        $user->login = 'test';
        $user->first_name = 'test';
        $user->last_name = 'test';
        $user->email = 'toto@example.com';
        $user->setPassword('test');
        $user->active = true;
        if (true !== $user->create()) {
            throw new Exception();
        }
        $user->setAssoc($groups[0]);
        $user->setAssoc($groups[1]);
        $user->setAssoc($perms[7]);
        $user->setAssoc($perms[8]);
    }

    protected function tearDown()
    {
        $db = Pluf::db();
        $schema = Pluf::factory('Pluf_DB_Schema', $db);
        $models = array('Pluf_Group', 'Pluf_User', 'Pluf_Permission', 'Pluf_RowPermission', 'Pluf_Message');
        foreach ($models as $model) {
            $schema->model = Pluf::factory($model);
            $schema->dropTables();
        }

    }

    public function testGetMessages()
    {
        $user = new Pluf_User(1);
        $mess = $user->get_pluf_message_list();
        $this->assertEquals(0, $mess->count());
    }

    public function testUniqueLogin()
    {
        $user = new Pluf_User();
        $user->login = 'test';
        $user->first_name = 'test';
        $user->last_name = 'test';
        $user->email = 'toto@example.com';
        $user->setPassword('test');
        $user->active = true;
        // Test user already exists
        try {
            $user->create();
        } catch (Exception $e) {
            return;
        }
        $this->fail();
    }

    public function testValidationUnique()
    {
        $this->markTestSkipped('Need to rewrite the form handling first.');
        // Test user already exists
        $user = new Pluf_User();
        $user->login = 'test';
        $user->first_name = 'test';
        $user->last_name = 'test';
        $user->email = 'toto@example.com';
        $user->setPassword('test');
        $user->active = true;
        $form = new Pluf_Form_Create();
        $form->defineFromModel($user);
        $new_data = $user->getData();
        $errors = $form->getValidationErrors($new_data);
        $this->assertEquals(1, count($errors));
    }

    public function testGetPermissions()
    {
        $user = new Pluf_User(1);
        $a = $user->getAllPermissions();
        $this->assertEquals(8, count($a));
    }

    public function testHasPermission()
    {
        $user = new Pluf_User(1);
        $this->assertEquals(true, $user->hasPerm('DummyModel.code-5'));
        $this->assertEquals(false, $user->hasPerm('DummyModel.code-7'));
        $user->administrator = true;
        $this->assertEquals(true, $user->hasPerm('DummyModel.code-7'));
        $user->active = false;
        $this->assertEquals(false, $user->hasPerm('DummyModel.code-5'));
    }

    public function testHasAppPermissions()
    {
        $user = new Pluf_User(1);
        $this->assertEquals(true, $user->hasAppPerms('DummyModel'));
        $this->assertEquals(false, $user->hasPerm('DummyModel2'));
        $user->administrator = true;
        $this->assertEquals(true, $user->hasPerm('DummyModel2'));
    }

    public function testRowPermission()
    {
        $user = new Pluf_User(1);
        $group = new Pluf_Group();
        $group->name = 'testRowPermission';
        $group->description = 'testRowPermission';
        $group->create();
        for ($i=1;$i<=5;$i++) {
            $mess = new Pluf_Message();
            $mess->user = $user;
            $mess->message = 'Dummy object to test against: '.$i;
            $mess->create();
        }
        $perm = new Pluf_Permission();
        $perm->application = 'Pluf_RowPermission';
        $perm->code_name = 'test1';
        $perm->name = 'test1';
        $perm->description = 'test1';
        $perm->create();
        // Permission through group
        $mess = new Pluf_Message(1);
        Pluf_RowPermission::add($group, $mess, $perm);
        $this->assertEquals(false,
                            $user->hasPerm('Pluf_RowPermission.test1', $mess));
        $user->setAssoc($group);
        $user->getAllPermissions(true); //reset the cache
        $this->assertEquals(true,
                            $user->hasPerm('Pluf_RowPermission.test1', $mess));
        $user->delAssoc($group);
        $user->getAllPermissions(true); //reset the cache
        $this->assertEquals(false,
                            $user->hasPerm('Pluf_RowPermission.test1', $mess));
        $user->setAssoc($group);
        $user->getAllPermissions(true); //reset the cache
        $this->assertEquals(true,
                            $user->hasPerm('Pluf_RowPermission.test1', $mess));
        Pluf_RowPermission::remove($group, $mess, $perm);
        $user->getAllPermissions(true); //reset the cache
        $this->assertEquals(false,
                            $user->hasPerm('Pluf_RowPermission.test1', $mess));
        // Permission through direct user
        Pluf_RowPermission::add($user, $mess, $perm);
        $user->getAllPermissions(true); //reset the cache
        $this->assertEquals(true,
                            $user->hasPerm('Pluf_RowPermission.test1', $mess));
        Pluf_RowPermission::remove($user, $mess, $perm);
        $user->getAllPermissions(true); //reset the cache
        $this->assertEquals(false,
                            $user->hasPerm('Pluf_RowPermission.test1', $mess));
        // Using string for the permission.
        Pluf_RowPermission::add($user, $mess, 'Pluf_RowPermission.test1');
        $user->getAllPermissions(true); //reset the cache
        $this->assertEquals(true,
                            $user->hasPerm('Pluf_RowPermission.test1', $mess));
        Pluf_RowPermission::remove($user, $mess, 'Pluf_RowPermission.test1');
        $user->getAllPermissions(true); //reset the cache
        $this->assertEquals(false,
                            $user->hasPerm('Pluf_RowPermission.test1', $mess));
    }

}

?>