public function testGetVersionsNoReleasesNoTags() { self::prepareAll(__DIR__ . '/../../data/extra-package.json', __DIR__ . '/../../data/releases.json', __DIR__ . '/../../data/tags.json'); $versions = ExtensionDataHelper::getVersions(self::$packagistVersions, array_shift(self::$versionsData)); $this->assertNotEmpty($versions); $this->assertTrue(isset($versions['current'])); }
/** * Method collects an extended package data from packagist.org and github.com * other services are not supported yet. * * @return \DevGroup\AdminUtils\response\AjaxResponse|string * @throws NotFoundHttpException */ public function actionDetails() { if (false === Yii::$app->request->isAjax) { throw new NotFoundHttpException("Page not found"); } $module = ExtensionsManager::module(); $packageName = Yii::$app->request->post('packageName'); $packagist = self::getPackagist(); $package = $packagist->get($packageName); $repository = $package->getRepository(); $packagistVersions = $package->getVersions(); $readme = ''; $versionsData = $dependencies = []; if (true === self::isGit($repository)) { $repository = preg_replace(['%^.*github.com\\/%', '%\\.git$%'], '', $repository); $gitAccessToken = $module->githubAccessToken; $gitApiUrl = rtrim($module->githubApiUrl, '/'); $applicationName = $module->applicationName; $headers = ['User-Agent: ' . $applicationName]; if (false === empty($gitAccessToken)) { $headers[] = 'Authorization: token ' . $gitAccessToken; } $gitReadmeUrl = $gitApiUrl . '/repos/' . $repository . '/readme'; $gitReleasesUrl = $gitApiUrl . '/repos/' . $repository . '/releases'; $readmeData = self::doRequest($gitReadmeUrl, $headers); $readme = ExtensionDataHelper::humanizeReadme($readmeData); $versionsData = Json::decode(self::doRequest($gitReleasesUrl, $headers)); if (true === empty($versionsData)) { $gitTagsUrl = $gitApiUrl . '/repos/' . $repository . '/tags'; $versionsData = Json::decode(self::doRequest($gitTagsUrl, $headers)); } } //ExtensionDataHelper::getVersions() must be invoked before other methods who fetches versioned data $versions = ExtensionDataHelper::getVersions($packagistVersions, array_shift($versionsData)); $jsonUrl = rtrim($module->packagistUrl, '/') . '/packages/' . trim($packageName, '/ ') . '.json'; $packageJson = self::doRequest($jsonUrl); $packageData = Json::decode($packageJson); $type = ExtensionDataHelper::getType($packageData); return $this->renderResponse('_ext-details', ['readme' => $readme, 'versions' => $versions, 'description' => ExtensionDataHelper::getLocalizedVersionedDataField($packageData, Extension::TYPE_YII, 'description'), 'name' => ExtensionDataHelper::getLocalizedVersionedDataField($packageData, Extension::TYPE_YII, 'name'), 'dependencies' => ['require' => ExtensionDataHelper::getOtherPackageVersionedData($packageData, 'require'), 'require-dev' => ExtensionDataHelper::getOtherPackageVersionedData($packageData, 'require-dev')], 'authors' => ExtensionDataHelper::getOtherPackageVersionedData($packageData, 'authors'), 'license' => ExtensionDataHelper::getOtherPackageVersionedData($packageData, 'license'), 'packageName' => $packageName, 'installed' => array_key_exists($packageName, $module->getExtensions()), 'type' => $type]); }