40 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | 
 | ||
|  | namespace PhpOffice\PhpSpreadsheetTests\Worksheet; | ||
|  | 
 | ||
|  | use PhpOffice\PhpSpreadsheet\Worksheet\Protection; | ||
|  | use PHPUnit\Framework\TestCase; | ||
|  | 
 | ||
|  | class ProtectionTest extends TestCase | ||
|  | { | ||
|  |     public function testVerifyPassword(): void | ||
|  |     { | ||
|  |         $protection = new Protection(); | ||
|  |         self::assertTrue($protection->verify('foo'), 'non-protected always pass'); | ||
|  | 
 | ||
|  |         $protection->setSheet(true); | ||
|  |         self::assertFalse($protection->verify('foo'), 'protected will fail'); | ||
|  | 
 | ||
|  |         $protection->setPassword('foo', true); | ||
|  |         self::assertSame('foo', $protection->getPassword(), 'was not stored as-is, without hashing'); | ||
|  |         self::assertFalse($protection->verify('foo'), 'setting already hashed password will not match'); | ||
|  | 
 | ||
|  |         $protection->setPassword('foo'); | ||
|  |         self::assertSame('CC40', $protection->getPassword(), 'was hashed'); | ||
|  |         self::assertTrue($protection->verify('foo'), 'setting non-hashed password will hash it and not match'); | ||
|  | 
 | ||
|  |         $protection->setAlgorithm(Protection::ALGORITHM_MD5); | ||
|  |         self::assertFalse($protection->verify('foo'), 'changing algorithm will not match anymore'); | ||
|  | 
 | ||
|  |         $protection->setPassword('foo'); | ||
|  |         $hash1 = $protection->getPassword(); | ||
|  |         $protection->setPassword('foo'); | ||
|  |         $hash2 = $protection->getPassword(); | ||
|  | 
 | ||
|  |         self::assertSame(24, mb_strlen($hash1)); | ||
|  |         self::assertSame(24, mb_strlen($hash2)); | ||
|  |         self::assertNotSame($hash1, $hash2, 'was hashed with automatic salt'); | ||
|  |         self::assertTrue($protection->verify('foo'), 'setting password again, will hash with proper algorithm and will match'); | ||
|  |     } | ||
|  | } |