TGViewer
Bitrix24 Apps & BITRIX24-PHP-SDK Bitrix24 Apps & BITRIX24-PHP-SDK @bitrix24phpsdk · 153 subscribers
Post #33 355
Текущее положение дел
Разработчики из Битрикс24 релизят новые методы и расширяют старые — добавляют в них поля

Задача
Сделать автоматическую проверку соответствия актуальности phpdoc документации во всех сущностях bitrix24-php-sdk.
Пример аннотации для контакта


/**
* @property-read array<int,int>|null $COMPANY_IDS
* @property-read int $CREATED_BY_ID
* @property-read CarbonImmutable $DATE_CREATE
* @property-read CarbonImmutable $DATE_MODIFY
* @property-read int|null $FACE_ID
* @property-read bool $EXPORT
* @property-read Email[] $EMAIL
* @property-read int $ID
* @property-read bool $HAS_EMAIL
*/

Эти аннотации используются в работе IDE и именно они обеспечивают полноту и правильность автокомплита.

Решение
Автоматическая сверка аннотаций с набором полей который возрващает Битрикс24.

Для чтения аннотаций в рантайме используется библиотека https://github.com/typhoon-php/typhoon

В phpunit добавлен кастомный ассерт


trait CustomBitrix24Assertions
{
/**
* @param array<int, non-empty-string> $fieldCodesFromApi
* @param class-string $resultItemClassName
* @return void
*/
protected function assertBitrix24AllResultItemFieldsAnnotated(array $fieldCodesFromApi, string $resultItemClassName): void
{
sort($fieldCodesFromApi);

// parse keys from phpdoc annotation
$props = TyphoonReflector::build()->reflectClass($resultItemClassName)->properties();
$propsFromAnnotations = [];
foreach ($props as $meta) {
if ($meta->isAnnotated() && !$meta->isNative()) {
$propsFromAnnotations[] = $meta->id->name;
}
}
sort($propsFromAnnotations);

$this->assertEquals($fieldCodesFromApi, $propsFromAnnotations,
sprintf('in phpdocs annotations for class %s we not found fields from actual api response: %s',
$resultItemClassName,
implode(', ', array_values(array_diff($fieldCodesFromApi, $propsFromAnnotations)))
));
}
}

и теперь на любую сущность Битрикс24 можно навесить новый тип теста — проверка актуальности документации

public function testAllSystemFieldsAnnotated(): void
{
$propListFromApi = (new Core\Fields\FieldsFilter())->filterSystemFields(array_keys($this->contactService->fields()->getFieldsDescription()));
$this->assertBitrix24AllResultItemFieldsAnnotated($propListFromApi, ContactItemResult::class);
}
GitHub GitHub - typhoon-php/typhoon: Ultimate type system and reflection for PHP Ultimate type system and reflection for PHP. Contribute to typhoon-php/typhoon development by creating an account on GitHub.
  • 👍 4
More from @bitrix24phpsdk
  1. Apr 20, 2026Первый, кто поставит звезду на репозиторий https://github.com/bitrix24/b24phpsdk и пришлет…
  2. Apr 20, 2026🧭 Разбираем современный PHP вместе с Podlodka PHP Crew PHP-стек может устаревать незаметн…
  3. Apr 13, 2026bitrix24-php-lib v0.5.0 🚀 Набор сущностей для разработки приложений Added - Journal bound…
  4. Mar 4, 20260.4.0 🚀 Added - ContactPersons support (main feature of 0.4.0) - Added ApplicationInstall…
  5. Mar 1, 20263.0.0 🚀 Added API v3 support: Tasks & EventLog 🎉 - Added support for Bitrix24 API v3 - A…
  6. Feb 25, 20261.10.1 🚀 Fixed Extend Scope and PortalLicenseFamily enums with new options https://github…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →