<?php
class SecurityDefaultAdminTest extends SapphireTest {
	
	function setUp() {
		parent::setUp();

		// TODO Workaround to force database clearing with no fixture present, 
		// and avoid sideeffects from other tests
		if(!self::using_temp_db()) self::create_temp_db();
		self::empty_temp_db();
	}
	
	function testCheckDefaultAdmin() {
		// TODO There's currently no way to inspect default admin state,
		//  hence we don't override existing settings
		if(Security::has_default_admin()) return;
		
		Security::setDefaultAdmin('admin', 'password');
		
		$this->assertTrue(Security::has_default_admin());
		$this->assertTrue(
			Security::check_default_admin('admin', 'password'),
			'Succeeds with correct username and password'
		);
		$this->assertFalse(
			Security::check_default_admin('wronguser', 'password'),
			'Fails with incorrect username'
		);
		$this->assertFalse(
			Security::check_default_admin('admin', 'wrongpassword'),
			'Fails with incorrect password'
		);
		
		Security::setDefaultAdmin(null, null);
	}
	
	function testFindAnAdministratorCreatesNewUser() {
		$adminMembers = Permission::get_members_by_permission('ADMIN');
		$this->assertFalse($adminMembers);
		
		$admin = Security::findAnAdministrator();
		
		$this->assertType('Member', $admin);
		$this->assertTrue(Permission::checkMember($admin, 'ADMIN'));
		$this->assertNull($admin->Email);
		$this->assertNull($admin->Password);
	}
	
}