grepDir($searchDir, '/address.book/i', ['*.php']); self::assertSame([], $hits, sprintf( "Search infrastructure still contains address-book hardcodings:\n%s", implode("\n", $hits) )); } public function testSearchConfigHasNoAddressBookHardcoding(): void { $file = dirname(__DIR__, 2) . '/core/Support/SearchConfig.php'; $content = file_get_contents($file); self::assertIsString($content); self::assertStringNotContainsString('address-book', $content); self::assertStringNotContainsString('address_book', $content); self::assertStringNotContainsString('addressBook', $content); } public function testLayoutContextHasNoHardcodedAddressBookBlock(): void { $file = dirname(__DIR__, 2) . '/core/Support/helpers/app.php'; $content = file_get_contents($file); self::assertIsString($content); self::assertDoesNotMatchRegularExpression( "/'\s*addressBook\s*'\s*=>\s*\[/", $content, 'appBuildLayoutNavContext() still has hardcoded addressBook array block' ); } public function testAsideTemplatesHaveNoHardcodedPeopleUi(): void { $this->assertFilesDoNotContain( [ dirname(__DIR__, 2) . '/templates/partials/app-main-aside-icon-bar.phtml', dirname(__DIR__, 2) . '/templates/partials/app-main-aside.phtml', ], [ 'aside-tab-people', '$canViewAddressBook', '$addressBookUrl', 'id="aside-panel-people"', 'data-search-key="address-book"', ] ); $aside = file_get_contents(dirname(__DIR__, 2) . '/templates/partials/app-main-aside.phtml'); self::assertIsString($aside); self::assertDoesNotMatchRegularExpression('/^\$canViewAddressBook\s*=/m', $aside); self::assertDoesNotMatchRegularExpression('/^\$peopleGroups\s*=/m', $aside); } public function testCoreNoLongerContainsAddressBookServiceDirectory(): void { $coreServiceDir = dirname(__DIR__, 2) . '/core/Service/AddressBook'; self::assertDirectoryDoesNotExist( $coreServiceDir, 'Addressbook service classes should live in modules/addressbook/lib, not in Core lib/Service' ); } }