framework/extensions/package-manager/tests/integration/api/MajorUpdateTest.php
Sami Mazouz 3fbe05fd18
feat(em): port extension manager from 1.0 (#3959)
* feat(em): port extension manager from 1.0

* Apply fixes from StyleCI

* chore: phpstan

---------

Co-authored-by: StyleCI Bot <bot@styleci.io>
2024-01-22 18:58:08 +01:00

130 lines
4.5 KiB
PHP

<?php
/*
* This file is part of Flarum.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/
namespace Flarum\ExtensionManager\Tests\integration\api;
use Flarum\ExtensionManager\Tests\integration\ChangeComposerConfig;
use Flarum\ExtensionManager\Tests\integration\DummyExtensions;
use Flarum\ExtensionManager\Tests\integration\RefreshComposerSetup;
use Flarum\ExtensionManager\Tests\integration\TestCase;
class MajorUpdateTest extends TestCase
{
use RefreshComposerSetup;
use ChangeComposerConfig;
use DummyExtensions;
/**
* @test
*/
public function cannot_update_when_no_update_check_ran()
{
$this->makeDummyExtensionCompatibleWith('flarum/dummy-incompatible-extension', '>=0.1.0-beta.15 <=0.1.0-beta.16');
$this->setComposerConfig([
'require' => [
'flarum/core' => '^0.1.0-beta.15',
'flarum/tags' => '^0.1.0-beta.15',
'flarum/dummy-incompatible-extension' => '^1.0.0'
],
'minimum-stability' => 'beta',
]);
$response = $this->send(
$this->request('POST', '/api/extension-manager/major-update', [
'authenticatedAs' => 1,
])
);
$this->assertEquals(409, $response->getStatusCode());
$this->assertEquals('no_new_major_version', $this->errorDetails($response)['code']);
}
/**
* @test
*/
public function can_update_when_major_update_available()
{
$this->makeDummyExtensionCompatibleWith('flarum/dummy-compatible-extension', '^0.1.0-beta.15 | ^1.0.0');
$this->setComposerConfig([
'require' => [
'flarum/core' => '^0.1.0-beta.15',
'flarum/tags' => '^0.1.0-beta.15',
'flarum/dummy-compatible-extension' => '^1.0.0'
],
'minimum-stability' => 'beta',
]);
$lastUpdateCheck = $this->send(
$this->request('POST', '/api/extension-manager/check-for-updates', [
'authenticatedAs' => 1,
])
);
$this->forgetComposerApp();
$response = $this->send(
$this->request('POST', '/api/extension-manager/major-update', [
'authenticatedAs' => 1,
])
);
$newMinorCoreVersion = array_filter(
json_decode((string) $lastUpdateCheck->getBody(), true)['updates']['installed'],
function ($package) {
return $package['name'] === 'flarum/core';
}
)[0]['latest-major'];
$this->assertEquals(201, $response->getStatusCode());
$this->assertPackageVersion('flarum/core', str_replace('v', '^', $newMinorCoreVersion));
$this->assertPackageVersion('flarum/tags', '*');
$this->assertPackageVersion('flarum/dummy-compatible-extension', '*');
}
/**
* @test
*/
public function cannot_update_with_incompatible_extensions()
{
$this->makeDummyExtensionCompatibleWith('flarum/dummy-incompatible-extension-a', '>=0.1.0-beta.16 <0.1.0-beta.17');
$this->makeDummyExtensionCompatibleWith('flarum/dummy-incompatible-extension-b', '>=0.1.0-beta.16 <=0.1.0-beta.17');
$this->makeDummyExtensionCompatibleWith('flarum/dummy-incompatible-extension-c', '0.1.0-beta.16');
$this->setComposerConfig([
'require' => [
'flarum/core' => '^0.1.0-beta.16',
'flarum/tags' => '^0.1.0-beta.16',
'flarum/dummy-incompatible-extension-a' => '^1.0.0',
'flarum/dummy-incompatible-extension-b' => '^1.0.0',
'flarum/dummy-incompatible-extension-c' => '^1.0.0',
],
'minimum-stability' => 'beta',
]);
$this->send(
$this->request('POST', '/api/extension-manager/check-for-updates', [
'authenticatedAs' => 1,
])
);
$response = $this->send(
$this->request('POST', '/api/extension-manager/major-update', [
'authenticatedAs' => 1,
])
);
$this->assertEquals(409, $response->getStatusCode());
$this->assertEquals('extensions_incompatible_with_new_major', $this->errorDetails($response)['guessed_cause']);
$this->assertEquals([
'flarum/dummy-incompatible-extension-a',
'flarum/dummy-incompatible-extension-b',
'flarum/dummy-incompatible-extension-c'
], $this->errorDetails($response)['incompatible_extensions']);
}
}