Subversion-Projekte lars-tiefland.prado

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?php

require_once(dirname(__FILE__).'/BaseTestCase.php');

class TimeEntryDaoTestCase extends BaseTestCase
{
        protected $entryDao;
        protected $projectDao;
        protected $userDao;
        protected $categoryDao;
        protected $reportDao;
        
        function setup()
        {
                parent::setup();
                $app = Prado::getApplication();
                $this->entryDao = $app->getModule('daos')->getDao('TimeEntryDao');
                $this->projectDao = $app->getModule('daos')->getDao('ProjectDao');
                $this->userDao = $app->getModule('daos')->getDao('UserDao');
                $this->categoryDao = $app->getModule('daos')->getDao('CategoryDao');
                $this->reportDao = $app->getModule('daos')->getDao('ReportDao');
                $this->flushDatabase();
        }
        
        function createNewProject()
        {
                $project = new ProjectRecord;
                $project->CreatorUserName = "admin";
                $project->DateCreated = time();
                $project->CompletionDate = strtotime('+1 month');
                $project->Description = 'Test project 1';
                $project->EstimateDuration = 100.5;
                $project->ManagerUserName = 'manager';
                $project->Name = 'Project 1';
                
                return $project;
        }

        function createNewProject2()
        {
                $project = new ProjectRecord;
                $project->CreatorUserName = "manager";
                $project->DateCreated = time();
                $project->CompletionDate = strtotime('+1 week');
                $project->Description = 'Test project 2';
                $project->EstimateDuration = 30.5;
                $project->ManagerUserName = 'manager';
                $project->Name = 'Project 2';
                
                return $project;
        }
        
        function createNewCategory()
        {
                $category = new CategoryRecord;
                $category->Name = 'Category 1';
                $category->EstimateDuration = 5.5;
                $category->Abbreviation = 'CAT 1';
                
                return $category;               
        }
        
        function createNewCategory2()
        {
                $category = new CategoryRecord;
                $category->Name = 'Category 2';
                $category->EstimateDuration = 1.5;
                $category->Abbreviation = 'CAT2';
                
                return $category;               
        }

        function createNewCategory3()
        {
                $category = new CategoryRecord;
                $category->Name = 'Category 3';
                $category->EstimateDuration = 2.5;
                $category->Abbreviation = 'CAT3';
                
                return $category;               
        }

        function createProjectsAndCategories()
        {
                $project1 = $this->createNewProject();
                $this->projectDao->addNewProject($project1);

                $project2 = $this->createNewProject2();
                $this->projectDao->addNewProject($project2);
                
                $category1 = $this->createNewCategory();
                $category1->ProjectID = $project1->ID;
                
                $category2 = $this->createNewCategory2();
                $category2->ProjectID = $project2->ID;

                $category3 = $this->createNewCategory3();
                $category3->ProjectID = $project1->ID;

                $this->categoryDao->addNewCategory($category1);
                $this->categoryDao->addNewCategory($category2);
                $this->categoryDao->addNewCategory($category3);
                
                return array($project1, $project2, $category1, $category2, $category3);
        }
        
        function assertSameEntry($entry1, $entry2)
        {
                $this->assertEqual($entry1->CreatorUserName, $entry2->CreatorUserName);
                $this->assertEqual($entry1->Description, $entry2->Description);
                $this->assertEqual($entry1->Duration, $entry2->Duration);
                $this->assertEqual($entry1->ID, $entry2->ID);
                $this->assertEqual($entry1->ReportDate, $entry2->ReportDate);
                $this->assertEqual($entry1->Username, $entry2->Username);
        }
        
        
        function createTimeEntry1()
        {
                $added = $this->createProjectsAndCategories();          
                
                $entry = new TimeEntryRecord;
                $entry->CreatorUserName = "admin";
                $entry->Category = $added[2];
                $entry->Description = "New work";
                $entry->Duration = 1.5;
                $entry->Project = $added[0];
                $entry->ReportDate = strtotime('-1 day');
                $entry->Username = 'consultant';
                
                return array($entry, $added);
        }

        function createTimeEntries2()
        {
                $added = $this->createProjectsAndCategories();          
                
                $entry = new TimeEntryRecord;
                $entry->CreatorUserName = "admin";
                $entry->Category = $added[2];
                $entry->Description = "New work";
                $entry->Duration = 1.2;
                $entry->Project = $added[0];
                $entry->ReportDate = strtotime('-10 day');
                $entry->Username = 'consultant';
                
                $entry2 = new TimeEntryRecord;
                $entry2->CreatorUserName = "admin";
                $entry2->Category = $added[4];
                $entry2->Description = "New work 2";
                $entry2->Duration = 5.5;
                $entry2->Project = $added[0];
                $entry2->ReportDate = strtotime('-4 day');
                $entry2->Username = 'consultant';

                return array($entry, $entry2, $added);
        }
        
        function testCreateNewTimeEntry()
        {
                $added = $this->createTimeEntry1();
                $entry = $added[0];
                $this->entryDao->addNewTimeEntry($entry);
                
                $check = $this->entryDao->getTimeEntryByID(1);
                
                $this->assertSameEntry($entry, $check);
        }
        
        function testDeleteTimeEntry()
        {
                $this->testCreateNewTimeEntry();
                $this->entryDao->deleteTimeEntry(1);
                
                $check = $this->entryDao->getTimeEntryByID(1);
                $this->assertNull($check);
        }       

        function testGetEntriesInProject()
        {
                $added = $this->createTimeEntries2();
                $this->entryDao->addNewTimeEntry($added[0]);
                $this->entryDao->addNewTimeEntry($added[1]);
                
                $list = $this->entryDao->getTimeEntriesInProject('consultant', 1);
                
                $this->assertEqual(count($list), 2);
                
                $this->assertSameEntry($list[0], $added[0]);
                $this->assertSameEntry($list[1], $added[1]);
        }

        function testUpdateEntry()
        {
                $added = $this->createTimeEntry1();
                $entry = $added[0];
                $this->entryDao->addNewTimeEntry($entry);
                
                $check = $this->entryDao->getTimeEntryByID(1);
                
                $this->assertSameEntry($entry, $check);
                
                $entry->Description = "asdasd";
                $entry->Duration = 200;
                
                $this->entryDao->updateTimeEntry($entry);
                
                $verify = $this->entryDao->getTimeEntryByID(1);
                
                $this->assertSameEntry($entry, $verify);
        }
}

?>