1<?php 2 3namespace dokuwiki\plugin\struct\test\types; 4 5use dokuwiki\plugin\struct\meta\ValidationException; 6use dokuwiki\plugin\struct\test\StructTest; 7use dokuwiki\plugin\struct\types\User; 8 9/** 10 * Testing the User Type 11 * 12 * @group plugin_struct 13 * @group plugins 14 */ 15class UserTest extends StructTest 16{ 17 18 public function test_validate_fail() 19 { 20 $this->expectException(ValidationException::class); 21 $user = new User(); 22 $user->validate('nosuchuser'); 23 } 24 25 public function test_validate_success() 26 { 27 $user = new User(); 28 $user->validate('testuser'); 29 $this->assertTrue(true); // we simply check that no exceptions are thrown 30 31 $user = new User(['existingonly' => false]); 32 $user->validate('nosuchuser'); 33 $this->assertTrue(true); // we simply check that no exceptions are thrown 34 } 35 36 public function test_ajax() 37 { 38 global $INPUT; 39 40 $user = new User( 41 [ 42 'autocomplete' => [ 43 'fullname' => true, 44 'mininput' => 2, 45 'maxresult' => 5, 46 ], 47 ] 48 ); 49 50 $INPUT->set('search', 'test'); 51 $this->assertEquals([['label' => 'Arthur Dent [testuser]', 'value' => 'testuser']], $user->handleAjax()); 52 53 $INPUT->set('search', 'dent'); 54 $this->assertEquals([['label' => 'Arthur Dent [testuser]', 'value' => 'testuser']], $user->handleAjax()); 55 56 $INPUT->set('search', 'd'); // under mininput 57 $this->assertEquals([], $user->handleAjax()); 58 59 $user = new User( 60 [ 61 'autocomplete' => [ 62 'fullname' => false, 63 'mininput' => 2, 64 'maxresult' => 5, 65 ], 66 ] 67 ); 68 69 $INPUT->set('search', 'test'); 70 $this->assertEquals([['label' => 'Arthur Dent [testuser]', 'value' => 'testuser']], $user->handleAjax()); 71 72 $INPUT->set('search', 'dent'); 73 $this->assertEquals([], $user->handleAjax()); 74 75 $user = new User( 76 [ 77 'autocomplete' => [ 78 'fullname' => false, 79 'mininput' => 2, 80 'maxresult' => 0, 81 ], 82 ] 83 ); 84 85 $INPUT->set('search', 'test'); 86 $this->assertEquals([], $user->handleAjax()); 87 88 // Check that numeric usernames are handled properly; PHP's 89 // strange handling of array keys that look like integers has 90 // caused bugs with this in the past. 91 global $auth; 92 $auth->createUser('12345', 'secret_password', 'Some Person', 'someone@example.com'); 93 $auth->createUser('54321', 'another_password', 'Someone Else', 's.else@example.com'); 94 95 $user = new User( 96 [ 97 'autocomplete' => [ 98 'fullname' => true, 99 'mininput' => 2, 100 'maxresult' => 5, 101 ], 102 ] 103 ); 104 105 $INPUT->set('search', 'Some'); 106 $this->assertEquals( 107 [ 108 ['label' => 'Some Person [12345]', 'value' => '12345'], 109 ['label' => 'Someone Else [54321]', 'value' => '54321'] 110 ], 111 $user->handleAjax() 112 ); 113 } 114} 115