mirror of
https://github.com/nextcloud/server.git
synced 2026-06-13 18:50:47 -04:00
Discard duplicate collection name from account serialization
Signed-off-by: Christopher Ng <chrng8@gmail.com>
This commit is contained in:
parent
d9c0799377
commit
a99d33c72d
2 changed files with 24 additions and 3 deletions
|
|
@ -104,9 +104,16 @@ class Account implements IAccount {
|
|||
return $result;
|
||||
}
|
||||
|
||||
/** @return IAccountPropertyCollection[]|IAccountProperty[] */
|
||||
/** @return array<string, IAccountProperty|array<int, IAccountProperty>> */
|
||||
public function jsonSerialize(): array {
|
||||
return $this->properties;
|
||||
$properties = $this->properties;
|
||||
foreach ($properties as $propertyName => $propertyObject) {
|
||||
if ($propertyObject instanceof IAccountPropertyCollection) {
|
||||
// Override collection serialization to discard duplicate name
|
||||
$properties[$propertyName] = $propertyObject->jsonSerialize()[$propertyName];
|
||||
}
|
||||
}
|
||||
return $properties;
|
||||
}
|
||||
|
||||
public function getUser(): IUser {
|
||||
|
|
|
|||
|
|
@ -120,12 +120,26 @@ class AccountTest extends TestCase {
|
|||
$user = $this->createMock(IUser::class);
|
||||
$properties = [
|
||||
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_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, ''),
|
||||
],
|
||||
];
|
||||
|
||||
$account = new Account($user);
|
||||
$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);
|
||||
|
||||
$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);
|
||||
|
||||
$this->assertEquals($properties, $account->jsonSerialize());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue