From 7358b1742f4e416e0cca05166e098d55389a1ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Tue, 9 Oct 2012 23:04:51 +0200 Subject: [PATCH] MDL-35854 fix username generator This eliminates infinite loop and also fixes potentially invalid email derived from usernames created from unicode first/last name. --- lib/phpunit/classes/data_generator.php | 6 ++++-- lib/phpunit/tests/generator_test.php | 5 +++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/phpunit/classes/data_generator.php b/lib/phpunit/classes/data_generator.php index 8225f236761..8bfd798c6c7 100644 --- a/lib/phpunit/classes/data_generator.php +++ b/lib/phpunit/classes/data_generator.php @@ -156,9 +156,11 @@ EOD; } if (!isset($record['username'])) { - $record['username'] = textlib::strtolower($record['firstname']).textlib::strtolower($record['lastname']); + $record['username'] = 'username'.$i; + $j = 2; while ($DB->record_exists('user', array('username'=>$record['username'], 'mnethostid'=>$record['mnethostid']))) { - $record['username'] = $record['username'].'_'.$i; + $record['username'] = 'username'.$i.'_'.$j; + $j++; } } diff --git a/lib/phpunit/tests/generator_test.php b/lib/phpunit/tests/generator_test.php index 316ee706561..3787b344dd5 100644 --- a/lib/phpunit/tests/generator_test.php +++ b/lib/phpunit/tests/generator_test.php @@ -44,6 +44,11 @@ class core_phpunit_generator_testcase extends advanced_testcase { $count = $DB->count_records('user'); $user = $generator->create_user(); $this->assertEquals($count+1, $DB->count_records('user')); + $this->assertSame($user->username, clean_param($user->username, PARAM_USERNAME)); + $this->assertSame($user->email, clean_param($user->email, PARAM_EMAIL)); + $user = $generator->create_user(array('firstname'=>'Žluťoučký', 'lastname'=>'Koníček')); + $this->assertSame($user->username, clean_param($user->username, PARAM_USERNAME)); + $this->assertSame($user->email, clean_param($user->email, PARAM_EMAIL)); $count = $DB->count_records('course_categories'); $category = $generator->create_category();