summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/tests
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@owncloud.com>2014-03-27 18:01:14 +0100
committerArthur Schiwon <blizzz@owncloud.com>2014-06-03 12:59:09 +0200
commit6d64d7ec3fb64d6b2f196d4008f59b64e5a50446 (patch)
tree830c0d7dc3c9b4feb10f261d2e41df8061296062 /apps/user_ldap/tests
parentd3e830e938fe85da2fd6d9912c26677034d952f7 (diff)
downloadnextcloud-server-6d64d7ec3fb64d6b2f196d4008f59b64e5a50446.tar.gz
nextcloud-server-6d64d7ec3fb64d6b2f196d4008f59b64e5a50446.zip
LDAP: put out fetching of user meta data into a fully tested class of its own and update them (mail, quota, etc.) directly after mapping. Fixes #7785 properly on master
Diffstat (limited to 'apps/user_ldap/tests')
-rw-r--r--apps/user_ldap/tests/user/user.php680
1 files changed, 680 insertions, 0 deletions
diff --git a/apps/user_ldap/tests/user/user.php b/apps/user_ldap/tests/user/user.php
new file mode 100644
index 00000000000..875e64e4fcf
--- /dev/null
+++ b/apps/user_ldap/tests/user/user.php
@@ -0,0 +1,680 @@
+<?php
+/**
+* ownCloud
+*
+* @author Arthur Schiwon
+* @copyright 2014 Arthur Schiwon blizzz@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+namespace OCA\user_ldap\tests;
+
+use OCA\user_ldap\lib\user\User;
+
+class Test_User_User extends \PHPUnit_Framework_TestCase {
+
+ private function getTestInstances() {
+ $access = $this->getMock('\OCA\user_ldap\lib\user\IUserTools');
+ $config = $this->getMock('\OCP\IConfig');
+ $filesys = $this->getMock('\OCA\user_ldap\lib\FilesystemHelper');
+ $log = $this->getMock('\OCA\user_ldap\lib\LogWrapper');
+ $avaMgr = $this->getMock('\OCP\IAvatarManager');
+ $image = $this->getMock('\OCP\Image');
+
+ return array($access, $config, $filesys, $image, $log, $avaMgr);
+ }
+
+ private function getAdvancedMocks($cfMock, $fsMock, $logMock, $avaMgr) {
+ static $conMethods;
+ static $accMethods;
+ static $umMethods;
+
+ if(is_null($conMethods) || is_null($accMethods)) {
+ $conMethods = get_class_methods('\OCA\user_ldap\lib\Connection');
+ $accMethods = get_class_methods('\OCA\user_ldap\lib\Access');
+ //getConnection shall not be replaced
+ unset($accMethods[array_search('getConnection', $accMethods)]);
+ $umMethods = get_class_methods('\OCA\user_ldap\lib\user\Manager');
+ }
+ $lw = $this->getMock('\OCA\user_ldap\lib\ILDAPWrapper');
+ $im = $this->getMock('\OCP\Image');
+ $um = $this->getMock('\OCA\user_ldap\lib\user\Manager',
+ $umMethods, array($cfMock, $fsMock, $logMock, $avaMgr, $im));
+ $connector = $this->getMock('\OCA\user_ldap\lib\Connection',
+ $conMethods, array($lw, null, null));
+ $access = $this->getMock('\OCA\user_ldap\lib\Access',
+ $accMethods, array($connector, $lw, $um));
+
+ return array($access, $connector);
+ }
+
+ public function testGetDNandUsername() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $this->assertSame($dn, $user->getDN());
+ $this->assertSame($uid, $user->getUsername());
+ }
+
+ public function testUpdateEmailProvided() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $connection->expects($this->once())
+ ->method('__get')
+ ->with($this->equalTo('ldapEmailAttribute'))
+ ->will($this->returnValue('email'));
+
+ $access->expects($this->once())
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('email'))
+ ->will($this->returnValue(array('alice@foo.bar')));
+
+ $config->expects($this->once())
+ ->method('setUserValue')
+ ->with($this->equalTo('alice'), $this->equalTo('settings'),
+ $this->equalTo('email'),
+ $this->equalTo('alice@foo.bar'))
+ ->will($this->returnValue(true));
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateEmail();
+ }
+
+ public function testUpdateEmailNotProvided() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $connection->expects($this->once())
+ ->method('__get')
+ ->with($this->equalTo('ldapEmailAttribute'))
+ ->will($this->returnValue('email'));
+
+ $access->expects($this->once())
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('email'))
+ ->will($this->returnValue(false));
+
+ $config->expects($this->never())
+ ->method('setUserValue');
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateEmail();
+ }
+
+ public function testUpdateEmailNotConfigured() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $connection->expects($this->once())
+ ->method('__get')
+ ->with($this->equalTo('ldapEmailAttribute'))
+ ->will($this->returnValue(''));
+
+ $access->expects($this->never())
+ ->method('readAttribute');
+
+ $config->expects($this->never())
+ ->method('setUserValue');
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateEmail();
+ }
+
+ public function testUpdateQuotaAllProvided() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $connection->expects($this->at(0))
+ ->method('__get')
+ ->with($this->equalTo('ldapQuotaDefault'))
+ ->will($this->returnValue('23 GB'));
+
+ $connection->expects($this->at(1))
+ ->method('__get')
+ ->with($this->equalTo('ldapQuotaAttribute'))
+ ->will($this->returnValue('myquota'));
+
+ $connection->expects($this->exactly(2))
+ ->method('__get');
+
+ $access->expects($this->once())
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('myquota'))
+ ->will($this->returnValue(array('42 GB')));
+
+ $config->expects($this->once())
+ ->method('setUserValue')
+ ->with($this->equalTo('alice'),
+ $this->equalTo('files'),
+ $this->equalTo('quota'),
+ $this->equalTo(\OCP\Util::computerFileSize('42 GB')))
+ ->will($this->returnValue(true));
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateQuota();
+ }
+
+ public function testUpdateQuotaDefaultProvided() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $connection->expects($this->at(0))
+ ->method('__get')
+ ->with($this->equalTo('ldapQuotaDefault'))
+ ->will($this->returnValue('23 GB'));
+
+ $connection->expects($this->at(1))
+ ->method('__get')
+ ->with($this->equalTo('ldapQuotaAttribute'))
+ ->will($this->returnValue('myquota'));
+
+ $connection->expects($this->exactly(2))
+ ->method('__get');
+
+ $access->expects($this->once())
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('myquota'))
+ ->will($this->returnValue(false));
+
+ $config->expects($this->once())
+ ->method('setUserValue')
+ ->with($this->equalTo('alice'),
+ $this->equalTo('files'),
+ $this->equalTo('quota'),
+ $this->equalTo(\OCP\Util::computerFileSize('23 GB')))
+ ->will($this->returnValue(true));
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateQuota();
+ }
+
+ public function testUpdateQuotaIndividualProvided() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $connection->expects($this->at(0))
+ ->method('__get')
+ ->with($this->equalTo('ldapQuotaDefault'))
+ ->will($this->returnValue(''));
+
+ $connection->expects($this->at(1))
+ ->method('__get')
+ ->with($this->equalTo('ldapQuotaAttribute'))
+ ->will($this->returnValue('myquota'));
+
+ $connection->expects($this->exactly(2))
+ ->method('__get');
+
+ $access->expects($this->once())
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('myquota'))
+ ->will($this->returnValue(array('23 GB')));
+
+ $config->expects($this->once())
+ ->method('setUserValue')
+ ->with($this->equalTo('alice'),
+ $this->equalTo('files'),
+ $this->equalTo('quota'),
+ $this->equalTo(\OCP\Util::computerFileSize('23 GB')))
+ ->will($this->returnValue(true));
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateQuota();
+ }
+
+ public function testUpdateQuotaNoneProvided() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $connection->expects($this->at(0))
+ ->method('__get')
+ ->with($this->equalTo('ldapQuotaDefault'))
+ ->will($this->returnValue(''));
+
+ $connection->expects($this->at(1))
+ ->method('__get')
+ ->with($this->equalTo('ldapQuotaAttribute'))
+ ->will($this->returnValue('myquota'));
+
+ $connection->expects($this->exactly(2))
+ ->method('__get');
+
+ $access->expects($this->once())
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('myquota'))
+ ->will($this->returnValue(false));
+
+ $config->expects($this->never())
+ ->method('setUserValue');
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateQuota();
+ }
+
+ public function testUpdateQuotaNoneConfigured() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $connection->expects($this->at(0))
+ ->method('__get')
+ ->with($this->equalTo('ldapQuotaDefault'))
+ ->will($this->returnValue(''));
+
+ $connection->expects($this->at(1))
+ ->method('__get')
+ ->with($this->equalTo('ldapQuotaAttribute'))
+ ->will($this->returnValue(''));
+
+ $connection->expects($this->exactly(2))
+ ->method('__get');
+
+ $access->expects($this->never())
+ ->method('readAttribute');
+
+ $config->expects($this->never())
+ ->method('setUserValue');
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateQuota();
+ }
+
+ //the testUpdateAvatar series also implicitely tests getAvatarImage
+ public function testUpdateAvatarJpegPhotoProvided() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $access->expects($this->once())
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('jpegPhoto'))
+ ->will($this->returnValue(array('this is a photo')));
+
+ $image->expects($this->once())
+ ->method('valid')
+ ->will($this->returnValue(true));
+ $image->expects($this->once())
+ ->method('width')
+ ->will($this->returnValue(128));
+ $image->expects($this->once())
+ ->method('height')
+ ->will($this->returnValue(128));
+ $image->expects($this->once())
+ ->method('centerCrop')
+ ->will($this->returnValue(true));
+
+ $filesys->expects($this->once())
+ ->method('isLoaded')
+ ->will($this->returnValue(true));
+
+ $avatar = $this->getMock('\OCP\IAvatar');
+ $avatar->expects($this->once())
+ ->method('set')
+ ->with($this->isInstanceOf($image));
+
+ $avaMgr->expects($this->once())
+ ->method('getAvatar')
+ ->with($this->equalTo('alice'))
+ ->will($this->returnValue($avatar));
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateAvatar();
+ }
+
+ public function testUpdateAvatarThumbnailPhotoProvided() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $access->expects($this->at(0))
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('jpegPhoto'))
+ ->will($this->returnValue(false));
+
+ $access->expects($this->at(1))
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('thumbnailPhoto'))
+ ->will($this->returnValue(array('this is a photo')));
+
+ $access->expects($this->exactly(2))
+ ->method('readAttribute');
+
+ $image->expects($this->once())
+ ->method('valid')
+ ->will($this->returnValue(true));
+ $image->expects($this->once())
+ ->method('width')
+ ->will($this->returnValue(128));
+ $image->expects($this->once())
+ ->method('height')
+ ->will($this->returnValue(128));
+ $image->expects($this->once())
+ ->method('centerCrop')
+ ->will($this->returnValue(true));
+
+ $filesys->expects($this->once())
+ ->method('isLoaded')
+ ->will($this->returnValue(true));
+
+ $avatar = $this->getMock('\OCP\IAvatar');
+ $avatar->expects($this->once())
+ ->method('set')
+ ->with($this->isInstanceOf($image));
+
+ $avaMgr->expects($this->once())
+ ->method('getAvatar')
+ ->with($this->equalTo('alice'))
+ ->will($this->returnValue($avatar));
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateAvatar();
+ }
+
+ public function testUpdateAvatarNotProvided() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $access->expects($this->at(0))
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('jpegPhoto'))
+ ->will($this->returnValue(false));
+
+ $access->expects($this->at(1))
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('thumbnailPhoto'))
+ ->will($this->returnValue(false));
+
+ $access->expects($this->exactly(2))
+ ->method('readAttribute');
+
+ $image->expects($this->never())
+ ->method('valid');
+ $image->expects($this->never())
+ ->method('width');
+ $image->expects($this->never())
+ ->method('height');
+ $image->expects($this->never())
+ ->method('centerCrop');
+
+ $filesys->expects($this->never())
+ ->method('isLoaded');
+
+ $avaMgr->expects($this->never())
+ ->method('getAvatar');
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->updateAvatar();
+ }
+
+ public function testUpdateBeforeFirstLogin() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $config->expects($this->at(0))
+ ->method('getUserValue')
+ ->with($this->equalTo('alice'), $this->equalTo('user_ldap'),
+ $this->equalTo(User::USER_PREFKEY_FIRSTLOGIN),
+ $this->equalTo(0))
+ ->will($this->returnValue(0));
+
+ $config->expects($this->at(1))
+ ->method('getUserValue')
+ ->with($this->equalTo('alice'), $this->equalTo('user_ldap'),
+ $this->equalTo(User::USER_PREFKEY_LASTREFRESH),
+ $this->equalTo(0))
+ ->will($this->returnValue(0));
+
+ $config->expects($this->exactly(2))
+ ->method('getUserValue');
+
+ $config->expects($this->never())
+ ->method('setUserValue');
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->update();
+ }
+
+ public function testUpdateAfterFirstLogin() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $config->expects($this->at(0))
+ ->method('getUserValue')
+ ->with($this->equalTo('alice'), $this->equalTo('user_ldap'),
+ $this->equalTo(User::USER_PREFKEY_FIRSTLOGIN),
+ $this->equalTo(0))
+ ->will($this->returnValue(1));
+
+ $config->expects($this->at(1))
+ ->method('getUserValue')
+ ->with($this->equalTo('alice'), $this->equalTo('user_ldap'),
+ $this->equalTo(User::USER_PREFKEY_LASTREFRESH),
+ $this->equalTo(0))
+ ->will($this->returnValue(0));
+
+ $config->expects($this->exactly(2))
+ ->method('getUserValue');
+
+ $config->expects($this->once())
+ ->method('setUserValue')
+ ->with($this->equalTo('alice'), $this->equalTo('user_ldap'),
+ $this->equalTo(User::USER_PREFKEY_LASTREFRESH),
+ $this->anything())
+ ->will($this->returnValue(true));
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->update();
+ }
+
+ public function testUpdateNoRefresh() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ list($access, $connection) =
+ $this->getAdvancedMocks($config, $filesys, $log, $avaMgr);
+
+ $config->expects($this->at(0))
+ ->method('getUserValue')
+ ->with($this->equalTo('alice'), $this->equalTo('user_ldap'),
+ $this->equalTo(User::USER_PREFKEY_FIRSTLOGIN),
+ $this->equalTo(0))
+ ->will($this->returnValue(1));
+
+ $config->expects($this->at(1))
+ ->method('getUserValue')
+ ->with($this->equalTo('alice'), $this->equalTo('user_ldap'),
+ $this->equalTo(User::USER_PREFKEY_LASTREFRESH),
+ $this->equalTo(0))
+ ->will($this->returnValue(time()));
+
+ $config->expects($this->exactly(2))
+ ->method('getUserValue');
+
+ $config->expects($this->never())
+ ->method('setUserValue');
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->update();
+ }
+
+ public function testMarkLogin() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ $config->expects($this->once())
+ ->method('setUserValue')
+ ->with($this->equalTo('alice'),
+ $this->equalTo('user_ldap'),
+ $this->equalTo(User::USER_PREFKEY_FIRSTLOGIN),
+ $this->equalTo(1))
+ ->will($this->returnValue(true));
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $user->markLogin();
+ }
+
+ public function testGetAvatarImageProvided() {
+ list($access, $config, $filesys, $image, $log, $avaMgr) =
+ $this->getTestInstances();
+
+ $access->expects($this->once())
+ ->method('readAttribute')
+ ->with($this->equalTo('uid=alice,dc=foo,dc=bar'),
+ $this->equalTo('jpegPhoto'))
+ ->will($this->returnValue(array('this is a photo')));
+
+ $uid = 'alice';
+ $dn = 'uid=alice,dc=foo,dc=bar';
+
+ $user = new User(
+ $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr);
+
+ $photo = $user->getAvatarImage();
+ $this->assertSame('this is a photo', $photo);
+ //make sure readAttribute is not called again but the already fetched
+ //photo is returned
+ $photo = $user->getAvatarImage();
+ }
+} \ No newline at end of file