Browse Source

Discard duplicate collection name from account serialization

Signed-off-by: Christopher Ng <chrng8@gmail.com>
tags/v24.0.0beta1
Christopher Ng 2 years ago
parent
commit
a99d33c72d
2 changed files with 24 additions and 3 deletions
  1. 9
    2
      lib/private/Accounts/Account.php
  2. 15
    1
      tests/lib/Accounts/AccountTest.php

+ 9
- 2
lib/private/Accounts/Account.php View File

@@ -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 {

+ 15
- 1
tests/lib/Accounts/AccountTest.php View File

@@ -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…
Cancel
Save