extension('flarum-package-manager', 'flarum-tags'); $tmp = realpath($this->tmpDir()); $this->app()->getContainer()->instance('flarum.paths', new Paths([ 'base' => $tmp, 'public' => "$tmp/public", 'storage' => "$tmp/storage", 'vendor' => "$tmp/vendor", ])); } protected function assertExtension(string $id, bool $exists) { $installed = json_decode(file_get_contents($this->app()->getContainer()->make(Paths::class)->vendor.'/composer/installed.json'), true); $installedExtensions = Arr::where($installed['packages'] ?? $installed, function (array $package) { return $package['type'] === 'flarum-extension'; }); $installedExtensionIds = array_map(function (string $name) { return ExtensionUtils::nameToId($name); }, Arr::pluck($installedExtensions, 'name')); if ($exists) { $this->assertTrue(in_array($id, $installedExtensionIds), "Failed asserting that extension $id is installed"); } else { $this->assertFalse(in_array($id, $installedExtensionIds), "Failed asserting that extension $id is not installed"); } } protected function assertExtensionExists(string $id) { $this->assertExtension($id, true); } protected function assertExtensionNotExists(string $id) { $this->assertExtension($id, false); } protected function assertPackageVersion(string $packageName, string $version) { $composerJson = $this->app()->getContainer()->make(ComposerJson::class)->get(); $this->assertArrayHasKey($packageName, $composerJson['require'], "$packageName is not required."); $this->assertEquals($version, $composerJson['require'][$packageName], "Expected $packageName to be $version, found {$composerJson['require'][$packageName]} instead."); } protected function requireExtension(string $package) { $this->composer("require $package"); } protected function removeExtension(string $package) { $this->composer("remove $package"); } protected function composer(string $command): void { /** @var ComposerAdapter $composer */ $composer = $this->app()->getContainer()->make(ComposerAdapter::class); $composer->run(new StringInput($command)); } protected function errorDetails(ResponseInterface $response): array { $json = json_decode((string) $response->getBody(), true); return $json['errors'] ? ($json['errors'][0] ?? []) : []; } }