UnitTestCase.class.php 4.84 KB
Newer Older
doctrine's avatar
doctrine committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
<?php
require_once("../classes/Doctrine.class.php");

Doctrine::loadAll();

require_once("classes.php");

ini_set('include_path',ucwords($_SERVER["DOCUMENT_ROOT"]));
require_once("simpletest/unit_tester.php");
require_once("simpletest/reporter.php");


class Doctrine_UnitTestCase extends UnitTestCase {
    protected $manager;
    protected $session;
    protected $objTable;
    protected $new;
    protected $old;
    protected $dbh;
    protected $listener;
    protected $cache;
    protected $users;
    protected $tables;

    private $init = false;

    public function init() {
        $name = get_class($this);

        $this->manager   = Doctrine_Manager::getInstance();
doctrine's avatar
doctrine committed
31
        $this->manager->setAttribute(Doctrine::ATTR_CACHE, Doctrine::CACHE_NONE);
doctrine's avatar
doctrine committed
32
        $this->manager->setAttribute(Doctrine::ATTR_FETCHMODE, Doctrine::FETCH_IMMEDIATE);
33
        
doctrine's avatar
doctrine committed
34
        $this->tables = array("entity","email","phonenumber","groupuser","album","song","element","error","description","address","account","task","resource","assignment");
35 36 37



doctrine's avatar
doctrine committed
38 39 40 41 42
        if($this->manager->count() > 0) {
            $this->session = $this->manager->getSession(0);
            $this->session->clear();
            $this->dbh     = $this->session->getDBH();
            $this->listener = $this->manager->getAttribute(Doctrine::ATTR_LISTENER);
43

doctrine's avatar
doctrine committed
44 45 46 47 48 49 50
        } else {
            $this->dbh     = Doctrine_DB::getConnection();
            $this->session = $this->manager->openSession($this->dbh);
            $this->listener = new Doctrine_Debugger();
            $this->manager->setAttribute(Doctrine::ATTR_LISTENER, $this->listener);
        }

51 52 53 54 55
        $this->prepareTables();
        $this->prepareData();
    }
    public function prepareTables() {
        foreach($this->tables as $name) {
doctrine's avatar
doctrine committed
56 57 58
            $this->dbh->query("DROP TABLE IF EXISTS $name");
        }

59
        foreach($this->tables as $name) {
60
            $name = ucwords($name);
doctrine's avatar
doctrine committed
61
            $table = $this->session->getTable($name);
doctrine's avatar
doctrine committed
62
            $table->getCache()->deleteAll();
63
            $table->clear();
doctrine's avatar
doctrine committed
64 65 66 67 68 69 70 71 72 73
        }

        $this->objTable = $this->session->getTable("User");
    }
    public function prepareData() {
        $groups = new Doctrine_Collection($this->session->getTable("Group"));

        $groups[0]->name = "Drama Actors";

        $groups[1]->name = "Quality Actors";
74

doctrine's avatar
doctrine committed
75 76 77

        $groups[2]->name = "Action Actors";
        $groups[2]["Phonenumber"][0]->phonenumber = "123 123";
78
        $groups->save();
doctrine's avatar
doctrine committed
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124

        $users = new Doctrine_Collection($this->session->getTable("User"));


        $users[0]->name = "zYne";
        $users[0]["Email"]->address = "zYne@example.com";
        $users[0]["Phonenumber"][0]->phonenumber = "123 123";

        $users[1]->name = "Arnold Schwarzenegger";
        $users[1]->Email->address = "arnold@example.com";
        $users[1]["Phonenumber"][0]->phonenumber = "123 123";
        $users[1]["Phonenumber"][1]->phonenumber = "456 456";
        $users[1]->Phonenumber[2]->phonenumber = "789 789";
        $users[1]->Group[0] = $groups[2];

        $users[2]->name = "Michael Caine";
        $users[2]->Email->address = "caine@example.com";
        $users[2]->Phonenumber[0]->phonenumber = "123 123";

        $users[3]->name = "Takeshi Kitano";
        $users[3]->Email->address = "kitano@example.com";
        $users[3]->Phonenumber[0]->phonenumber = "111 222 333";

        $users[4]->name = "Sylvester Stallone";
        $users[4]->Email->address = "stallone@example.com";
        $users[4]->Phonenumber[0]->phonenumber = "111 555 333";
        $users[4]["Phonenumber"][1]->phonenumber = "123 213";
        $users[4]["Phonenumber"][2]->phonenumber = "444 555";

        $users[5]->name = "Kurt Russell";
        $users[5]->Email->address = "russell@example.com";
        $users[5]->Phonenumber[0]->phonenumber = "111 222 333";

        $users[6]->name = "Jean Reno";
        $users[6]->Email->address = "reno@example.com";
        $users[6]->Phonenumber[0]->phonenumber = "111 222 333";
        $users[6]["Phonenumber"][1]->phonenumber = "222 123";
        $users[6]["Phonenumber"][2]->phonenumber = "123 456";

        $users[7]->name = "Edward Furlong";
        $users[7]->Email->address = "furlong@example.com";
        $users[7]->Phonenumber[0]->phonenumber = "111 567 333";

        $this->users = $users;
        $this->session->flush();
    }
doctrine's avatar
doctrine committed
125 126 127
    public function getSession() {
        return $this->session;
    }
doctrine's avatar
doctrine committed
128 129 130 131 132 133 134 135 136
    public function clearCache() {
        foreach($this->tables as $name) {
            $table = $this->session->getTable($name);
            $table->getCache()->deleteAll();
        }
    }
    public function setUp() {
        if( ! $this->init) $this->init(); 
        
137 138 139
        if(isset($this->objTable))
            $this->objTable->clear();
        
doctrine's avatar
doctrine committed
140 141 142 143
        $this->init    = true;
    }
}
?>