MDL-32628 add user_picture->get_url() tests

This commit is contained in:
Petr Skoda
2012-04-27 15:03:24 +02:00
parent fa5306878b
commit 80705c1000
2 changed files with 126 additions and 4 deletions
+1
View File
@@ -201,6 +201,7 @@ EOD;
$record['idnumber'] = '';
$record['email'] = md5($record['username']);
$record['username'] = $delname;
$record['picture'] = 0;
}
$userid = $DB->insert_record('user', $record);
+125 -4
View File
@@ -32,9 +32,9 @@ require_once($CFG->libdir . '/outputcomponents.php');
/**
* Unit tests for the user_picture class
*/
class user_picture_testcase extends basic_testcase {
class user_picture_testcase extends advanced_testcase {
public function test_user_picture_fields_aliasing() {
public function test_fields_aliasing() {
$fields = user_picture::fields();
$fields = array_map('trim', explode(',', $fields));
$this->assertTrue(in_array('id', $fields));
@@ -63,7 +63,7 @@ class user_picture_testcase extends basic_testcase {
$this->assertTrue(in_array("custom1 AS prefixcustom1", $returned), "Expected pattern 'custom1 AS prefixcustom1' not returned");
}
public function test_user_picture_fields_unaliasing() {
public function test_fields_unaliasing() {
$fields = user_picture::fields();
$fields = array_map('trim', explode(',', $fields));
@@ -87,7 +87,7 @@ class user_picture_testcase extends basic_testcase {
$this->assertEquals($returned->custom1, 'Value of custom1');
}
public function test_user_picture_fields_unaliasing_null() {
public function test_fields_unaliasing_null() {
$fields = user_picture::fields();
$fields = array_map('trim', explode(',', $fields));
@@ -112,6 +112,127 @@ class user_picture_testcase extends basic_testcase {
}
$this->assertEquals($returned->custom1, 'Value of custom1');
}
public function test_get_url() {
global $DB, $CFG;
$this->resetAfterTest();
// verify new install contains expected defaults
$this->assertEquals('standard', $CFG->theme);
$this->assertEquals(1, $CFG->themerev);
$this->assertEquals(0, $CFG->themedesignermode);
$this->assertEquals('http://www.example.com/moodle', $CFG->wwwroot);
$this->assertEquals($CFG->wwwroot, $CFG->httpswwwroot);
$this->assertEquals(0, $CFG->enablegravatar);
// create some users
$page = new moodle_page();
$page->set_url('/user/profile.php');
$page->set_context(context_system::instance());
$renderer = $page->get_renderer('core');
$user1 = $this->getDataGenerator()->create_user(array('picture'=>1, 'email'=>'[email protected]'));
$context1 = context_user::instance($user1->id);
$user2 = $this->getDataGenerator()->create_user(array('picture'=>0, 'email'=>'[email protected]'));
$context2 = context_user::instance($user2->id);
$user3 = $this->getDataGenerator()->create_user(array('picture'=>1, 'deleted'=>1, 'email'=>'[email protected]'));
$context3 = context_user::instance($user3->id, IGNORE_MISSING);
$this->assertEquals($user3->picture, 0);
$this->assertNotEquals($user3->email, '[email protected]');
$this->assertFalse($context3);
// try valid user with picture when user context is not cached - 1 query expected
context_helper::reset_caches();
$reads = $DB->perf_get_reads();
$up1 = new user_picture($user1);
$this->assertEquals($reads, $DB->perf_get_reads());
$this->assertEquals($CFG->wwwroot.'/pluginfile.php/15/user/icon/standard/f2', $up1->get_url($page, $renderer)->out(false));
$this->assertEquals($reads+1, $DB->perf_get_reads());
// try valid user with contextid hint - no queries expected
$user1->contextid = $context1->id;
context_helper::reset_caches();
$reads = $DB->perf_get_reads();
$up1 = new user_picture($user1);
$this->assertEquals($reads, $DB->perf_get_reads());
$this->assertEquals($CFG->wwwroot.'/pluginfile.php/15/user/icon/standard/f2', $up1->get_url($page, $renderer)->out(false));
$this->assertEquals($reads, $DB->perf_get_reads());
// try valid user without image - no queries expected
context_helper::reset_caches();
$reads = $DB->perf_get_reads();
$up2 = new user_picture($user2);
$this->assertEquals($reads, $DB->perf_get_reads());
$this->assertEquals($CFG->wwwroot.'/theme/image.php?theme=standard&image=u%2Ff2&rev=1', $up2->get_url($page, $renderer)->out(false));
$this->assertEquals($reads, $DB->perf_get_reads());
// try guessing of deleted users - no queries expected
unset($user3->deleted);
context_helper::reset_caches();
$reads = $DB->perf_get_reads();
$up3 = new user_picture($user3);
$this->assertEquals($reads, $DB->perf_get_reads());
$this->assertEquals($CFG->wwwroot.'/theme/image.php?theme=standard&image=u%2Ff2&rev=1', $up3->get_url($page, $renderer)->out(false));
$this->assertEquals($reads, $DB->perf_get_reads());
// try incorrectly deleted users (with valid email and pciture flag) - some DB reads expected
$user3->email = '[email protected]';
$user3->picture = 1;
$reads = $DB->perf_get_reads();
$up3 = new user_picture($user3);
$this->assertEquals($reads, $DB->perf_get_reads());
$this->assertEquals($CFG->wwwroot.'/theme/image.php?theme=standard&image=u%2Ff2&rev=1', $up3->get_url($page, $renderer)->out(false));
$this->assertTrue($reads < $DB->perf_get_reads());
// test gravatar
set_config('enablegravatar', 1);
$up2 = new user_picture($user2);
$this->assertEquals('http://www.gravatar.com/avatar/ab53a2911ddf9b4817ac01ddcd3d975f?s=35&d=http%3A%2F%2Fwww.example.com%2Fmoodle%2Ftheme%2Fimage.php%3Ftheme%3Dstandard%26image%3Du%252Ff2%26rev%3D1', $up2->get_url($page, $renderer)->out(false));
// uploaded image takes precedence before gravatar
$up1 = new user_picture($user1);
$this->assertEquals($CFG->wwwroot.'/pluginfile.php/15/user/icon/standard/f2', $up1->get_url($page, $renderer)->out(false));
// deleted user can not have gravatar
$user3->email = 'deleted';
$user3->picture = 0;
$up3 = new user_picture($user3);
$this->assertEquals($CFG->wwwroot.'/theme/image.php?theme=standard&image=u%2Ff2&rev=1', $up3->get_url($page, $renderer)->out(false));
// https versions
$CFG->httpswwwroot = str_replace('http:', 'https:', $CFG->wwwroot);
$up1 = new user_picture($user1);
$this->assertEquals($CFG->httpswwwroot.'/pluginfile.php/15/user/icon/standard/f2', $up1->get_url($page, $renderer)->out(false));
$up3 = new user_picture($user3);
$this->assertEquals($CFG->httpswwwroot.'/theme/image.php?theme=standard&image=u%2Ff2&rev=1', $up3->get_url($page, $renderer)->out(false));
$up2 = new user_picture($user2);
$this->assertEquals('https://secure.gravatar.com/avatar/ab53a2911ddf9b4817ac01ddcd3d975f?s=35&d=https%3A%2F%2Fwww.example.com%2Fmoodle%2Ftheme%2Fimage.php%3Ftheme%3Dstandard%26image%3Du%252Ff2%26rev%3D1', $up2->get_url($page, $renderer)->out(false));
// test themed images
set_config('enablegravatar', 0);
$this->assertTrue(file_exists("$CFG->dirroot/theme/formal_white/config.php")); // use any other theme
set_config('theme', 'formal_white');
$CFG->httpswwwroot = $CFG->wwwroot;
$page = new moodle_page();
$page->set_url('/user/profile.php');
$page->set_context(context_system::instance());
$renderer = $page->get_renderer('core');
$up1 = new user_picture($user1);
$this->assertEquals($CFG->wwwroot.'/pluginfile.php/15/user/icon/formal_white/f2', $up1->get_url($page, $renderer)->out(false));
$up2 = new user_picture($user2);
$this->assertEquals($CFG->wwwroot.'/theme/image.php?theme=formal_white&image=u%2Ff2&rev=1', $up2->get_url($page, $renderer)->out(false));
}
}