@ -1,9 +1,10 @@
< ? php
/**
* @ copyright 2017 Christoph Wurst < christoph @ winzerhof - wurst . at >
* @ copyright 2017 Lukas Reschke < lukas @ statuscode . ch >
*
* @ author 2017 Christoph Wurst < christoph @ winzerhof - wurst . at >
* @ author 2017 Lukas Reschke < lukas @ statuscode . ch >
*
* @ license GNU AGPL version 3 or any later version
*
@ -34,19 +35,14 @@ use PHPUnit_Framework_MockObject_MockObject;
use Test\TestCase ;
class ContactsStoreTest extends TestCase {
/** @var ContactsStore */
private $contactsStore ;
/** @var IManager|PHPUnit_Framework_MockObject_MockObject */
private $contactsManager ;
/** @var IUserManager|PHPUnit_Framework_MockObject_MockObject */
private $userManager ;
/** @var IGroupManager|PHPUnit_Framework_MockObject_MockObject */
private $groupManager ;
/** @var IConfig|PHPUnit_Framework_MockObject_MockObject */
private $config ;
@ -54,21 +50,18 @@ class ContactsStoreTest extends TestCase {
parent :: setUp ();
$this -> contactsManager = $this -> createMock ( IManager :: class );
$this -> userManager = $this -> createMock ( IUserManager :: class );
$this -> groupManager = $this -> createMock ( IGroupManager :: class );
$this -> config = $this -> createMock ( IConfig :: class );
$this -> contactsStore = new ContactsStore ( $this -> contactsManager , $this -> config , $this -> userManager , $this -> groupManager );
}
public function testGetContactsWithoutFilter () {
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */
$user = $this -> createMock ( IUser :: class );
$this -> contactsManager -> expects ( $this -> once ())
-> method ( 'search' )
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' ]))
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' , 'EMAIL' ]))
-> willReturn ([
[
'UID' => 123 ,
@ -94,10 +87,11 @@ class ContactsStoreTest extends TestCase {
}
public function testGetContactsHidesOwnEntry () {
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */
$user = $this -> createMock ( IUser :: class );
$this -> contactsManager -> expects ( $this -> once ())
-> method ( 'search' )
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' ]))
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' , 'EMAIL' ]))
-> willReturn ([
[
'UID' => 'user123' ,
@ -120,10 +114,11 @@ class ContactsStoreTest extends TestCase {
}
public function testGetContactsWithoutBinaryImage () {
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */
$user = $this -> createMock ( IUser :: class );
$this -> contactsManager -> expects ( $this -> once ())
-> method ( 'search' )
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' ]))
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' , 'EMAIL' ]))
-> willReturn ([
[
'UID' => 123 ,
@ -148,10 +143,11 @@ class ContactsStoreTest extends TestCase {
}
public function testGetContactsWithoutAvatarURI () {
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */
$user = $this -> createMock ( IUser :: class );
$this -> contactsManager -> expects ( $this -> once ())
-> method ( 'search' )
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' ]))
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' , 'EMAIL' ]))
-> willReturn ([
[
'UID' => 123 ,
@ -176,21 +172,26 @@ class ContactsStoreTest extends TestCase {
}
public function testGetContactsWhenUserIsInExcludeGroups () {
$this -> config -> expects ( $this -> at ( 0 ))
$this -> config -> expects ( $this -> at ( 0 )) -> method ( 'getAppValue' )
-> with ( $this -> equalTo ( 'core' ), $this -> equalTo ( 'shareapi_allow_share_dialog_user_enumeration' ), $this -> equalTo ( 'yes' ))
-> willReturn ( 'yes' );
$this -> config -> expects ( $this -> at ( 1 ))
-> method ( 'getAppValue' )
-> with ( $this -> equalTo ( 'core' ), $this -> equalTo ( 'shareapi_exclude_groups' ), $this -> equalTo ( 'no' ))
-> willReturn ( 'yes' );
$this -> config -> expects ( $this -> at ( 1 ))
$this -> config -> expects ( $this -> at ( 2 ))
-> method ( 'getAppValue' )
-> with ( $this -> equalTo ( 'core' ), $this -> equalTo ( 'shareapi_only_share_with_group_members' ), $this -> equalTo ( 'no' ))
-> willReturn ( 'yes' );
$this -> config -> expects ( $this -> at ( 2 ))
$this -> config -> expects ( $this -> at ( 3 ))
-> method ( 'getAppValue' )
-> with ( $this -> equalTo ( 'core' ), $this -> equalTo ( 'shareapi_exclude_groups_list' ), $this -> equalTo ( '' ))
-> willReturn ( '["group1", "group5", "group6"]' );
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $currentUser */
$currentUser = $this -> createMock ( IUser :: class );
$currentUser -> expects ( $this -> once ())
-> method ( 'getUID' )
@ -199,12 +200,12 @@ class ContactsStoreTest extends TestCase {
$this -> groupManager -> expects ( $this -> once ())
-> method ( 'getUserGroupIds' )
-> with ( $this -> equalTo ( $currentUser ))
-> willReturn ([ " group1 " , " group2 " , " group3 " ]);
-> willReturn ([ 'group1' , 'group2' , 'group3' ]);
$this -> contactsManager -> expects ( $this -> once ())
-> method ( 'search' )
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' ]))
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' , 'EMAIL' ]))
-> willReturn ([
[
'UID' => 'user123' ,
@ -220,19 +221,23 @@ class ContactsStoreTest extends TestCase {
$entries = $this -> contactsStore -> getContacts ( $currentUser , '' );
$this -> assertCount ( 0 , $entries );
}
public function testGetContactsOnlyIfInTheSameGroup () {
$this -> config -> expects ( $this -> at ( 0 )) -> method ( 'getAppValue' )
$this -> config -> expects ( $this -> at ( 0 )) -> method ( 'getAppValue' )
-> with ( $this -> equalTo ( 'core' ), $this -> equalTo ( 'shareapi_allow_share_dialog_user_enumeration' ), $this -> equalTo ( 'yes' ))
-> willReturn ( 'yes' );
$this -> config -> expects ( $this -> at ( 1 )) -> method ( 'getAppValue' )
-> with ( $this -> equalTo ( 'core' ), $this -> equalTo ( 'shareapi_exclude_groups' ), $this -> equalTo ( 'no' ))
-> willReturn ( 'no' );
$this -> config -> expects ( $this -> at ( 1 ))
$this -> config -> expects ( $this -> at ( 2 ))
-> method ( 'getAppValue' )
-> with ( $this -> equalTo ( 'core' ), $this -> equalTo ( 'shareapi_only_share_with_group_members' ), $this -> equalTo ( 'no' ))
-> willReturn ( 'yes' );
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $currentUser */
$currentUser = $this -> createMock ( IUser :: class );
$currentUser -> expects ( $this -> once ())
-> method ( 'getUID' )
@ -241,8 +246,7 @@ class ContactsStoreTest extends TestCase {
$this -> groupManager -> expects ( $this -> at ( 0 ))
-> method ( 'getUserGroupIds' )
-> with ( $this -> equalTo ( $currentUser ))
-> willReturn ([ " group1 " , " group2 " , " group3 " ]);
-> willReturn ([ 'group1' , 'group2' , 'group3' ]);
$user1 = $this -> createMock ( IUser :: class );
$this -> userManager -> expects ( $this -> at ( 0 ))
@ -252,7 +256,7 @@ class ContactsStoreTest extends TestCase {
$this -> groupManager -> expects ( $this -> at ( 1 ))
-> method ( 'getUserGroupIds' )
-> with ( $this -> equalTo ( $user1 ))
-> willReturn ([ " group1 " ]);
-> willReturn ([ 'group1' ]);
$user2 = $this -> createMock ( IUser :: class );
$this -> userManager -> expects ( $this -> at ( 1 ))
-> method ( 'get' )
@ -261,7 +265,7 @@ class ContactsStoreTest extends TestCase {
$this -> groupManager -> expects ( $this -> at ( 2 ))
-> method ( 'getUserGroupIds' )
-> with ( $this -> equalTo ( $user2 ))
-> willReturn ([ " group2 " , " group3 " ]);
-> willReturn ([ 'group2' , 'group3' ]);
$user3 = $this -> createMock ( IUser :: class );
$this -> userManager -> expects ( $this -> at ( 2 ))
-> method ( 'get' )
@ -270,11 +274,11 @@ class ContactsStoreTest extends TestCase {
$this -> groupManager -> expects ( $this -> at ( 3 ))
-> method ( 'getUserGroupIds' )
-> with ( $this -> equalTo ( $user3 ))
-> willReturn ([ " group8 " , " group9 " ]);
-> willReturn ([ 'group8' , 'group9' ]);
$this -> contactsManager -> expects ( $this -> once ())
-> method ( 'search' )
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' ]))
-> with ( $this -> equalTo ( '' ), $this -> equalTo ([ 'FN' , 'EMAIL' ]))
-> willReturn ([
[
'UID' => 'user1' ,
@ -298,13 +302,99 @@ class ContactsStoreTest extends TestCase {
$this -> assertCount ( 3 , $entries );
$this -> assertEquals ( 'user1' , $entries [ 0 ] -> getProperty ( 'UID' ));
$this -> assertEquals ( 'user2' , $entries [ 1 ] -> getProperty ( 'UID' ));
$this -> assertEquals ( 'contact' , $entries [ 3 ] -> getProperty ( 'UID' ));
$this -> assertEquals ( 'contact' , $entries [ 2 ] -> getProperty ( 'UID' ));
}
public function testGetContactsWithFilter () {
$this -> config -> expects ( $this -> at ( 0 )) -> method ( 'getAppValue' )
-> with ( $this -> equalTo ( 'core' ), $this -> equalTo ( 'shareapi_allow_share_dialog_user_enumeration' ), $this -> equalTo ( 'yes' ))
-> willReturn ( 'no' );
}
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */
$user = $this -> createMock ( IUser :: class );
$this -> contactsManager -> expects ( $this -> any ())
-> method ( 'search' )
-> willReturn ([
[
'UID' => 'a567' ,
'FN' => 'Darren Roner' ,
'EMAIL' => [
'darren@roner.au' ,
],
'isLocalSystemBook' => true ,
],
[
'UID' => 'john' ,
'FN' => 'John Doe' ,
'EMAIL' => [
'john@example.com' ,
],
'isLocalSystemBook' => true ,
],
[
'FN' => 'Anne D' ,
'EMAIL' => [
'anne@example.com' ,
],
'isLocalSystemBook' => false ,
],
]);
$user -> expects ( $this -> any ())
-> method ( 'getUID' )
-> willReturn ( 'user123' );
// Complete match on UID should match
$entry = $this -> contactsStore -> getContacts ( $user , 'a567' );
$this -> assertSame ( 2 , count ( $entry ));
$this -> assertEquals ([
'darren@roner.au'
], $entry [ 0 ] -> getEMailAddresses ());
// Partial match on UID should not match
$entry = $this -> contactsStore -> getContacts ( $user , 'a56' );
$this -> assertSame ( 1 , count ( $entry ));
$this -> assertEquals ([
'anne@example.com'
], $entry [ 0 ] -> getEMailAddresses ());
// Complete match on email should match
$entry = $this -> contactsStore -> getContacts ( $user , 'john@example.com' );
$this -> assertSame ( 2 , count ( $entry ));
$this -> assertEquals ([
'john@example.com'
], $entry [ 0 ] -> getEMailAddresses ());
$this -> assertEquals ([
'anne@example.com'
], $entry [ 1 ] -> getEMailAddresses ());
// Partial match on email should not match
$entry = $this -> contactsStore -> getContacts ( $user , 'john@example.co' );
$this -> assertSame ( 1 , count ( $entry ));
$this -> assertEquals ([
'anne@example.com'
], $entry [ 0 ] -> getEMailAddresses ());
// Match on FN should not match
$entry = $this -> contactsStore -> getContacts ( $user , 'Darren Roner' );
$this -> assertSame ( 1 , count ( $entry ));
$this -> assertEquals ([
'anne@example.com'
], $entry [ 0 ] -> getEMailAddresses ());
// Don't filter users in local addressbook
$entry = $this -> contactsStore -> getContacts ( $user , 'Anne D' );
$this -> assertSame ( 1 , count ( $entry ));
$this -> assertEquals ([
'anne@example.com'
], $entry [ 0 ] -> getEMailAddresses ());
}
public function testFindOneUser () {
$this -> config -> expects ( $this -> at ( 0 )) -> method ( 'getAppValue' )
-> with ( $this -> equalTo ( 'core' ), $this -> equalTo ( 'shareapi_allow_share_dialog_user_enumeration' ), $this -> equalTo ( 'yes' ))
-> willReturn ( 'yes' );
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */
$user = $this -> createMock ( IUser :: class );
$this -> contactsManager -> expects ( $this -> once ())
-> method ( 'search' )
@ -323,7 +413,7 @@ class ContactsStoreTest extends TestCase {
'isLocalSystemBook' => true
],
]);
$user -> expects ( $this -> once ())
$user -> expects ( $this -> any ())
-> method ( 'getUID' )
-> willReturn ( 'user123' );
@ -335,6 +425,7 @@ class ContactsStoreTest extends TestCase {
}
public function testFindOneEMail () {
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */
$user = $this -> createMock ( IUser :: class );
$this -> contactsManager -> expects ( $this -> once ())
-> method ( 'search' )
@ -353,7 +444,7 @@ class ContactsStoreTest extends TestCase {
'isLocalSystemBook' => false
],
]);
$user -> expects ( $this -> once ())
$user -> expects ( $this -> any ())
-> method ( 'getUID' )
-> willReturn ( 'user123' );
@ -365,6 +456,7 @@ class ContactsStoreTest extends TestCase {
}
public function testFindOneNotSupportedType () {
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */
$user = $this -> createMock ( IUser :: class );
$entry = $this -> contactsStore -> findOne ( $user , 42 , 'darren@roner.au' );
@ -373,6 +465,7 @@ class ContactsStoreTest extends TestCase {
}
public function testFindOneNoMatches () {
/** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */
$user = $this -> createMock ( IUser :: class );
$this -> contactsManager -> expects ( $this -> once ())
-> method ( 'search' )