<?php require_once(dirname(__FILE__).'/BaseTestCase.php'); class UserDaoTestCase extends BaseTestCase { protected $userDao; function setup() { parent::setup(); $app = Prado::getApplication(); $this->userDao = $app->getModule('daos')->getDao('UserDao'); $this->flushDatabase(); } function assertIsAdmin($user) { if(!$user) return $this->fail(); $this->assertEqual($user->getName(), 'admin'); $this->assertEqual($user->getEmailAddress(), 'admin@pradosoft.com'); } function assertSameUser($user1, $user2) { if(is_null($user1) || is_null($user2)) return $this->fail(); $this->assertEqual($user1->getName(), $user2->getName()); $this->assertEqual($user1->getEmailAddress(), $user2->getEmailAddress()); } function assertIsAdminRole($user) { if(is_null($user)) return $this->fail(); $this->assertTrue($user->isInRole('admin')); } function assertIsManagerRole($user) { if(is_null($user)) return $this->fail(); $this->assertTrue($user->isInRole('manager')); } function assertIsConsultantRole($user) { if(is_null($user)) return $this->fail(); $this->assertTrue($user->isInRole('consultant')); } function assertNotConsultantRole($user) { if(is_null($user)) return $this->fail(); $this->assertFalse($user->isInRole('consultant')); } function testGetUserByName() { $user = $this->userDao->getUserByName('admin'); $this->assertNotNull($user); $this->assertIsAdmin($user); } function testGetNonExistentUser() { $user = $this->userDao->getUserByName('none'); $this->assertNull($user); } function testGetUsers() { $users = $this->userDao->getAllUsers(); $this->assertEqual(count($users), 3); } function testUserLogon() { $success = $this->userDao->validateUser('admin', 'admin'); $this->assertTrue($success); } function testBadLogin() { $success = $this->userDao->validateUser('admin', 'hahah'); $this->assertFalse($success); } function testAddNewUser() { $user = new TimeTrackerUser(new UserManager()); $user->Name = "user1"; $user->EmailAddress = 'user1@pradosoft.com'; $this->userDao->addNewUser($user, 'password'); $check = $this->userDao->getUserByName($user->Name); $this->assertSameUser($check, $user); } function testDeleteUserByName() { $this->userDao->deleteUserByName('admin'); $admin = $this->userDao->getUserByName('admin'); $this->assertNull($admin); $users = $this->userDao->getAllUsers(); $this->assertEqual(count($users), 2); } function testAutoSignon() { $user = new TimeTrackerUser(new UserManager()); $user->Name = "admin"; $token = $this->userDao->createSignonToken($user); $check = $this->userDao->validateSignon($token); $this->assertIsAdmin($check); } function testBadAutoSignon() { $user = new TimeTrackerUser(new UserManager()); $user->Name = "admin"; $token = $this->userDao->createSignonToken($user); $check = $this->userDao->validateSignon('adasd'); $this->assertNull($check); } function testAdminRoles() { $user = $this->userDao->getUserByName('admin'); $this->assertIsAdminRole($user); $this->assertIsManagerRole($user); $this->assertIsConsultantRole($user); } function testSetUserRoles() { $user = new TimeTrackerUser(new UserManager()); $user->Name = "user1"; $user->EmailAddress = 'user1@pradosoft.com'; $user->Roles = array("manager", "consultant"); $this->userDao->addNewUser($user, 'password'); $check = $this->userDao->getUserByName('user1'); $this->assertIsManagerRole($check); $this->assertIsConsultantRole($check); } function testSetUserRoleNoNullUser() { $user = new TimeTrackerUser(new UserManager()); $user->Name = "user1"; $user->EmailAddress = 'user1@pradosoft.com'; $user->Roles = array("manager", "consultant"); try { $this->userDao->updateUserRoles($user); $this->fail(); } catch(TDbException $e) { $this->pass(); } $check = $this->sqlmap->queryForObject('GetUserByName', 'user1'); $this->assertNull($check); } function testUpdateUser() { $user = $this->userDao->getUserByName('admin'); $user->EmailAddress = 'something@pradosoft.com'; $user->Roles = array('manager', 'admin'); $this->userDao->updateUser($user); $check = $this->userDao->getUserByName('admin'); $this->assertIsAdminRole($check); $this->assertIsManagerRole($check); $this->assertNotConsultantRole($check); } function testUpdateUserPassword() { $user = $this->userDao->getUserByName('admin'); $user->EmailAddress = 'something@pradosoft.com'; $user->Roles = array('manager', 'admin'); $pass = 'newpasword'; $this->userDao->updateUser($user, $pass); $success = $this->userDao->validateUser('admin', $pass); $this->assertTrue($success); } function testClearSignonTokens() { $user = new TimeTrackerUser(new UserManager()); $user->Name = "admin"; $token1 = $this->userDao->createSignonToken($user); sleep(1); $token2 = $this->userDao->createSignonToken($user); $this->assertNotEqual($token1, $token2); $check1 = $this->userDao->validateSignon($token1); $check2 = $this->userDao->validateSignon($token2); $this->assertIsAdmin($check1); $this->assertIsAdmin($check2); $this->userDao->clearSignonTokens($user); $check3 = $this->userDao->validateSignon($token1); $check4 = $this->userDao->validateSignon($token2); $this->assertNull($check3); $this->assertNull($check4); } function testClearAllSigonTokens() { $user1 = new TimeTrackerUser(new UserManager()); $user1->Name = "admin"; $user2 = new TimeTrackerUser(new UserManager()); $user2->Name = "manager"; $token1 = $this->userDao->createSignonToken($user1); $token2 = $this->userDao->createSignonToken($user2); $check1 = $this->userDao->validateSignon($token1); $check2 = $this->userDao->validateSignon($token2); $this->assertIsAdmin($check1); $this->assertNotNull($check2); $this->assertEqual($check2->Name, $user2->Name); $this->userDao->clearSignonTokens(); $check3 = $this->userDao->validateSignon($token1); $check4 = $this->userDao->validateSignon($token2); $this->assertNull($check3); $this->assertNull($check4); } }