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]);
 }