2018-10-12 03:30:44 -04:00
< ? php
/**
* @ copyright Copyright ( c ) 2018 Julius Härtl < jus @ bitgrid . net >
*
* @ author Julius Härtl < jus @ bitgrid . net >
*
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program 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 program . If not , see < http :// www . gnu . org / licenses />.
*
*/
namespace Test\Accounts ;
use OC\Accounts\Account ;
use OC\Accounts\AccountProperty ;
2021-06-03 13:53:18 -04:00
use OC\Accounts\AccountPropertyCollection ;
2018-10-15 07:29:53 -04:00
use OCP\Accounts\IAccountManager ;
2018-10-12 03:30:44 -04:00
use OCP\IUser ;
use Test\TestCase ;
/**
* Class AccountTest
*
* @ package Test\Accounts
*/
class AccountTest extends TestCase {
public function testConstructor () {
$user = $this -> createMock ( IUser :: class );
$account = new Account ( $user );
$this -> assertEquals ( $user , $account -> getUser ());
}
public function testSetProperty () {
$user = $this -> createMock ( IUser :: class );
2021-05-19 18:41:00 -04:00
$property = new AccountProperty ( IAccountManager :: PROPERTY_WEBSITE , 'https://example.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED , '' );
2018-10-12 03:30:44 -04:00
$account = new Account ( $user );
2021-03-23 09:47:10 -04:00
$account -> setProperty ( IAccountManager :: PROPERTY_WEBSITE , 'https://example.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED );
2018-10-15 07:29:53 -04:00
$this -> assertEquals ( $property , $account -> getProperty ( IAccountManager :: PROPERTY_WEBSITE ));
2018-10-12 03:30:44 -04:00
}
2021-06-03 13:53:18 -04:00
public function testGetAndGetAllProperties () {
2018-10-12 03:30:44 -04:00
$user = $this -> createMock ( IUser :: class );
$properties = [
2021-05-19 18:41:00 -04:00
IAccountManager :: PROPERTY_WEBSITE => new AccountProperty ( IAccountManager :: PROPERTY_WEBSITE , 'https://example.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_EMAIL => new AccountProperty ( IAccountManager :: PROPERTY_EMAIL , 'user@example.com' , IAccountManager :: SCOPE_LOCAL , IAccountManager :: VERIFIED , '' )
2018-10-12 03:30:44 -04:00
];
$account = new Account ( $user );
2021-03-23 09:47:10 -04:00
$account -> setProperty ( IAccountManager :: PROPERTY_WEBSITE , 'https://example.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED );
$account -> setProperty ( IAccountManager :: PROPERTY_EMAIL , 'user@example.com' , IAccountManager :: SCOPE_LOCAL , IAccountManager :: VERIFIED );
2018-10-12 03:30:44 -04:00
2021-06-03 13:53:18 -04:00
$col = new AccountPropertyCollection ( IAccountManager :: COLLECTION_EMAIL );
$additionalProperty = new AccountProperty ( $col -> getName (), 'second@example.org' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED , '' );
$col -> addProperty ( $additionalProperty );
$account -> setPropertyCollection ( $col );
2018-10-12 03:30:44 -04:00
$this -> assertEquals ( $properties , $account -> getProperties ());
2021-06-03 13:53:18 -04:00
$properties [] = $additionalProperty ;
$this -> assertEquals ( array_values ( $properties ), \iterator_to_array ( $account -> getAllProperties ()));
2018-10-12 03:30:44 -04:00
}
2022-03-07 19:49:00 -05:00
public function testSetAllPropertiesFromJson () {
$user = $this -> createMock ( IUser :: class );
$properties = [
IAccountManager :: PROPERTY_DISPLAYNAME => new AccountProperty ( IAccountManager :: PROPERTY_DISPLAYNAME , 'Steve' , IAccountManager :: SCOPE_FEDERATED , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_ADDRESS => new AccountProperty ( IAccountManager :: PROPERTY_ADDRESS , '123 Acorn Avenue' , IAccountManager :: SCOPE_FEDERATED , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_WEBSITE => new AccountProperty ( IAccountManager :: PROPERTY_WEBSITE , 'https://www.example.org' , IAccountManager :: SCOPE_FEDERATED , IAccountManager :: VERIFIED , '' ),
IAccountManager :: PROPERTY_EMAIL => new AccountProperty ( IAccountManager :: PROPERTY_EMAIL , 'steve@earth.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: VERIFICATION_IN_PROGRESS , '' ),
IAccountManager :: PROPERTY_AVATAR => new AccountProperty ( IAccountManager :: PROPERTY_AVATAR , '' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_PHONE => new AccountProperty ( IAccountManager :: PROPERTY_PHONE , '+358407991028' , IAccountManager :: SCOPE_LOCAL , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_TWITTER => new AccountProperty ( IAccountManager :: PROPERTY_TWITTER , 'therealsteve' , IAccountManager :: SCOPE_PRIVATE , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_ORGANISATION => new AccountProperty ( IAccountManager :: PROPERTY_ORGANISATION , 'Steve Incorporated' , IAccountManager :: SCOPE_FEDERATED , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_ROLE => new AccountProperty ( IAccountManager :: PROPERTY_ROLE , 'Founder' , IAccountManager :: SCOPE_FEDERATED , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_HEADLINE => new AccountProperty ( IAccountManager :: PROPERTY_HEADLINE , 'I am Steve' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_BIOGRAPHY => new AccountProperty ( IAccountManager :: PROPERTY_BIOGRAPHY , 'Steve is the best' , IAccountManager :: SCOPE_LOCAL , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_PROFILE_ENABLED => new AccountProperty ( IAccountManager :: PROPERTY_PROFILE_ENABLED , '1' , IAccountManager :: SCOPE_FEDERATED , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: COLLECTION_EMAIL => [
new AccountProperty ( IAccountManager :: COLLECTION_EMAIL , 'steve@mars.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED , '' ),
new AccountProperty ( IAccountManager :: COLLECTION_EMAIL , 'steve@neptune.com' , IAccountManager :: SCOPE_FEDERATED , IAccountManager :: NOT_VERIFIED , '' ),
],
];
$account = new Account ( $user );
$account -> setAllPropertiesFromJson ( json_decode ( json_encode ( $properties ), true ));
$this -> assertEquals ( $properties , $account -> jsonSerialize ());
}
2018-10-12 03:30:44 -04:00
public function testGetFilteredProperties () {
$user = $this -> createMock ( IUser :: class );
$properties = [
2021-05-19 18:41:00 -04:00
IAccountManager :: PROPERTY_WEBSITE => new AccountProperty ( IAccountManager :: PROPERTY_WEBSITE , 'https://example.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED , '' ),
IAccountManager :: PROPERTY_EMAIL => new AccountProperty ( IAccountManager :: PROPERTY_EMAIL , 'user@example.com' , IAccountManager :: SCOPE_LOCAL , IAccountManager :: VERIFIED , '' ),
IAccountManager :: PROPERTY_PHONE => new AccountProperty ( IAccountManager :: PROPERTY_PHONE , '123456' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: VERIFIED , '' ),
2018-10-12 03:30:44 -04:00
];
$account = new Account ( $user );
2021-03-23 09:47:10 -04:00
$account -> setProperty ( IAccountManager :: PROPERTY_WEBSITE , 'https://example.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED );
$account -> setProperty ( IAccountManager :: PROPERTY_EMAIL , 'user@example.com' , IAccountManager :: SCOPE_LOCAL , IAccountManager :: VERIFIED );
$account -> setProperty ( IAccountManager :: PROPERTY_PHONE , '123456' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: VERIFIED );
2018-10-12 03:30:44 -04:00
2021-06-03 13:53:18 -04:00
$col = new AccountPropertyCollection ( IAccountManager :: COLLECTION_EMAIL );
$additionalProperty1 = new AccountProperty ( $col -> getName (), 'second@example.org' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED , '' );
$additionalProperty2 = new AccountProperty ( $col -> getName (), 'third@example.org' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: VERIFIED , '' );
$col -> addProperty ( $additionalProperty1 );
$col -> addProperty ( $additionalProperty2 );
$account -> setPropertyCollection ( $col );
2018-10-12 03:30:44 -04:00
$this -> assertEquals (
[
2018-10-15 07:29:53 -04:00
IAccountManager :: PROPERTY_WEBSITE => $properties [ IAccountManager :: PROPERTY_WEBSITE ],
IAccountManager :: PROPERTY_PHONE => $properties [ IAccountManager :: PROPERTY_PHONE ],
2021-06-03 13:53:18 -04:00
IAccountManager :: COLLECTION_EMAIL . '#0' => $additionalProperty1 ,
IAccountManager :: COLLECTION_EMAIL . '#1' => $additionalProperty2 ,
2018-10-12 03:30:44 -04:00
],
2021-03-23 09:47:10 -04:00
$account -> getFilteredProperties ( IAccountManager :: SCOPE_PUBLISHED )
2018-10-12 03:30:44 -04:00
);
$this -> assertEquals (
[
2018-10-15 07:29:53 -04:00
IAccountManager :: PROPERTY_EMAIL => $properties [ IAccountManager :: PROPERTY_EMAIL ],
IAccountManager :: PROPERTY_PHONE => $properties [ IAccountManager :: PROPERTY_PHONE ],
2021-06-03 13:53:18 -04:00
IAccountManager :: COLLECTION_EMAIL . '#0' => $additionalProperty2 ,
2018-10-12 03:30:44 -04:00
],
2018-10-15 07:29:53 -04:00
$account -> getFilteredProperties ( null , IAccountManager :: VERIFIED )
2018-10-12 03:30:44 -04:00
);
$this -> assertEquals (
2021-06-03 13:53:18 -04:00
[
IAccountManager :: PROPERTY_PHONE => $properties [ IAccountManager :: PROPERTY_PHONE ],
IAccountManager :: COLLECTION_EMAIL . '#0' => $additionalProperty2 ,
],
$account -> getFilteredProperties ( IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: VERIFIED ),
2018-10-12 03:30:44 -04:00
);
}
public function testJsonSerialize () {
$user = $this -> createMock ( IUser :: class );
$properties = [
2021-05-19 18:41:00 -04:00
IAccountManager :: PROPERTY_WEBSITE => new AccountProperty ( IAccountManager :: PROPERTY_WEBSITE , 'https://example.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED , '' ),
2022-03-07 19:38:38 -05:00
IAccountManager :: PROPERTY_EMAIL => new AccountProperty ( IAccountManager :: PROPERTY_EMAIL , 'user@example.com' , IAccountManager :: SCOPE_LOCAL , IAccountManager :: VERIFIED , '' ),
IAccountManager :: COLLECTION_EMAIL => [
new AccountProperty ( IAccountManager :: COLLECTION_EMAIL , 'apple@orange.com' , IAccountManager :: SCOPE_LOCAL , IAccountManager :: NOT_VERIFIED , '' ),
new AccountProperty ( IAccountManager :: COLLECTION_EMAIL , 'banana@orange.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: VERIFICATION_IN_PROGRESS , '' ),
new AccountProperty ( IAccountManager :: COLLECTION_EMAIL , 'kiwi@watermelon.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: VERIFIED , '' ),
],
2018-10-12 03:30:44 -04:00
];
2022-03-07 19:38:38 -05:00
2018-10-12 03:30:44 -04:00
$account = new Account ( $user );
2021-03-23 09:47:10 -04:00
$account -> setProperty ( IAccountManager :: PROPERTY_WEBSITE , 'https://example.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: NOT_VERIFIED );
$account -> setProperty ( IAccountManager :: PROPERTY_EMAIL , 'user@example.com' , IAccountManager :: SCOPE_LOCAL , IAccountManager :: VERIFIED );
2018-10-12 03:30:44 -04:00
2022-03-07 19:38:38 -05:00
$col = new AccountPropertyCollection ( IAccountManager :: COLLECTION_EMAIL );
$col -> setProperties ([
new AccountProperty ( $col -> getName (), 'apple@orange.com' , IAccountManager :: SCOPE_LOCAL , IAccountManager :: NOT_VERIFIED , '' ),
new AccountProperty ( $col -> getName (), 'banana@orange.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: VERIFICATION_IN_PROGRESS , '' ),
new AccountProperty ( $col -> getName (), 'kiwi@watermelon.com' , IAccountManager :: SCOPE_PUBLISHED , IAccountManager :: VERIFIED , '' ),
]);
$account -> setPropertyCollection ( $col );
2018-10-12 03:30:44 -04:00
$this -> assertEquals ( $properties , $account -> jsonSerialize ());
}
}