fix(ui): Initialize latestVersion in Upgrade component mount (#7774)
This commit is contained in:
commit
cedfa1db71
2 changed files with 126 additions and 8 deletions
|
|
@ -23,24 +23,42 @@ class Upgrade extends Component
|
||||||
|
|
||||||
public function mount()
|
public function mount()
|
||||||
{
|
{
|
||||||
$this->currentVersion = config('constants.coolify.version');
|
$this->refreshUpgradeState();
|
||||||
$this->devMode = isDev();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkUpdate()
|
public function checkUpdate()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->latestVersion = get_latest_version_of_coolify();
|
$this->refreshUpgradeState();
|
||||||
$this->currentVersion = config('constants.coolify.version');
|
|
||||||
$this->isUpgradeAvailable = data_get(InstanceSettings::get(), 'new_version_available', false);
|
|
||||||
if (isDev()) {
|
|
||||||
$this->isUpgradeAvailable = true;
|
|
||||||
}
|
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
return handleError($e, $this);
|
return handleError($e, $this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function refreshUpgradeState(): void
|
||||||
|
{
|
||||||
|
$this->currentVersion = config('constants.coolify.version');
|
||||||
|
$this->latestVersion = get_latest_version_of_coolify();
|
||||||
|
$this->devMode = isDev();
|
||||||
|
|
||||||
|
if ($this->devMode) {
|
||||||
|
$this->isUpgradeAvailable = true;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$settings = InstanceSettings::find(0);
|
||||||
|
$hasNewerVersion = version_compare($this->latestVersion, $this->currentVersion, '>');
|
||||||
|
$newVersionAvailable = (bool) data_get($settings, 'new_version_available', false);
|
||||||
|
|
||||||
|
if ($settings && $newVersionAvailable && ! $hasNewerVersion) {
|
||||||
|
$settings->update(['new_version_available' => false]);
|
||||||
|
$newVersionAvailable = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->isUpgradeAvailable = $hasNewerVersion && $newVersionAvailable;
|
||||||
|
}
|
||||||
|
|
||||||
public function upgrade()
|
public function upgrade()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
100
tests/Feature/UpgradeComponentTest.php
Normal file
100
tests/Feature/UpgradeComponentTest.php
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Livewire\Upgrade;
|
||||||
|
use App\Models\InstanceSettings;
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
use Livewire\Livewire;
|
||||||
|
|
||||||
|
uses(RefreshDatabase::class);
|
||||||
|
|
||||||
|
it('initializes latest version during mount from cached versions data', function () {
|
||||||
|
config(['constants.coolify.version' => '4.0.0-beta.998']);
|
||||||
|
InstanceSettings::create([
|
||||||
|
'id' => 0,
|
||||||
|
'new_version_available' => true,
|
||||||
|
]);
|
||||||
|
|
||||||
|
Cache::shouldReceive('remember')
|
||||||
|
->once()
|
||||||
|
->with('coolify:versions:all', 3600, Mockery::type(\Closure::class))
|
||||||
|
->andReturn([
|
||||||
|
'coolify' => [
|
||||||
|
'v4' => [
|
||||||
|
'version' => '4.0.0-beta.999',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
Livewire::test(Upgrade::class)
|
||||||
|
->assertSet('currentVersion', '4.0.0-beta.998')
|
||||||
|
->assertSet('latestVersion', '4.0.0-beta.999')
|
||||||
|
->assertSet('isUpgradeAvailable', true)
|
||||||
|
->assertSee('4.0.0-beta.998')
|
||||||
|
->assertSee('4.0.0-beta.999');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('falls back to 0.0.0 during mount when cached versions data is unavailable', function () {
|
||||||
|
InstanceSettings::create([
|
||||||
|
'id' => 0,
|
||||||
|
'new_version_available' => false,
|
||||||
|
]);
|
||||||
|
|
||||||
|
Cache::shouldReceive('remember')
|
||||||
|
->once()
|
||||||
|
->with('coolify:versions:all', 3600, Mockery::type(\Closure::class))
|
||||||
|
->andReturn(null);
|
||||||
|
|
||||||
|
Livewire::test(Upgrade::class)
|
||||||
|
->assertSet('latestVersion', '0.0.0');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('clears stale upgrade availability when current version already matches latest version', function () {
|
||||||
|
config(['constants.coolify.version' => '4.0.0-beta.999']);
|
||||||
|
InstanceSettings::create([
|
||||||
|
'id' => 0,
|
||||||
|
'new_version_available' => true,
|
||||||
|
]);
|
||||||
|
|
||||||
|
Cache::shouldReceive('remember')
|
||||||
|
->once()
|
||||||
|
->with('coolify:versions:all', 3600, Mockery::type(\Closure::class))
|
||||||
|
->andReturn([
|
||||||
|
'coolify' => [
|
||||||
|
'v4' => [
|
||||||
|
'version' => '4.0.0-beta.999',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
Livewire::test(Upgrade::class)
|
||||||
|
->assertSet('latestVersion', '4.0.0-beta.999')
|
||||||
|
->assertSet('isUpgradeAvailable', false);
|
||||||
|
|
||||||
|
expect(InstanceSettings::findOrFail(0)->new_version_available)->toBeFalse();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('clears stale upgrade availability when current version is newer than cached latest version', function () {
|
||||||
|
config(['constants.coolify.version' => '4.0.0-beta.1000']);
|
||||||
|
InstanceSettings::create([
|
||||||
|
'id' => 0,
|
||||||
|
'new_version_available' => true,
|
||||||
|
]);
|
||||||
|
|
||||||
|
Cache::shouldReceive('remember')
|
||||||
|
->once()
|
||||||
|
->with('coolify:versions:all', 3600, Mockery::type(\Closure::class))
|
||||||
|
->andReturn([
|
||||||
|
'coolify' => [
|
||||||
|
'v4' => [
|
||||||
|
'version' => '4.0.0-beta.999',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
Livewire::test(Upgrade::class)
|
||||||
|
->assertSet('latestVersion', '4.0.0-beta.999')
|
||||||
|
->assertSet('isUpgradeAvailable', false);
|
||||||
|
|
||||||
|
expect(InstanceSettings::findOrFail(0)->new_version_available)->toBeFalse();
|
||||||
|
});
|
||||||
Loading…
Reference in a new issue