Skip to content

Commit

Permalink
refactor Backup status to an enum
Browse files Browse the repository at this point in the history
  • Loading branch information
Nielsvanpach committed Jun 12, 2024
1 parent 8cfccee commit 9def80e
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 37 deletions.
12 changes: 12 additions & 0 deletions src/Enums/BackupStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

namespace Spatie\BackupServer\Enums;

enum BackupStatus: string
{
case Pending = 'pending';
case InProgress = 'in_progress';
case Completed = 'completed';
case Failed = 'failed';
case Deleting = 'deleting';
}
28 changes: 10 additions & 18 deletions src/Models/Backup.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Spatie\BackupServer\Enums\BackupStatus;
use Spatie\BackupServer\Models\Concerns\HasAsyncDelete;
use Spatie\BackupServer\Models\Concerns\LogsActivity;
use Spatie\BackupServer\Support\Helpers\DestinationLocation;
Expand All @@ -34,17 +35,8 @@ class Backup extends Model

public $guarded = [];

public const STATUS_PENDING = 'pending';

public const STATUS_IN_PROGRESS = 'in_progress';

public const STATUS_COMPLETED = 'completed';

public const STATUS_FAILED = 'failed';

public const STATUS_DELETING = 'deleting';

protected $casts = [
'status' => BackupStatus::class,
'log' => 'array',
'size_in_kb' => 'int',
'real_size_in_kb' => 'int',
Expand Down Expand Up @@ -112,7 +104,7 @@ public function destinationLocation(): DestinationLocation
public function markAsInProgress(): self
{
$this->update([
'status' => self::STATUS_IN_PROGRESS,
'status' => BackupStatus::InProgress,
]);

return $this;
Expand All @@ -123,7 +115,7 @@ public function markAsCompleted(): self
$this->logInfo(Task::BACKUP, 'Backup completed.');

$this->update([
'status' => self::STATUS_COMPLETED,
'status' => BackupStatus::Completed,
'completed_at' => now(),
]);

Expand All @@ -135,20 +127,20 @@ public function markAsFailed(string $errorMessage): self
$this->logError(Task::BACKUP, "Backup failed: {$errorMessage}");

$this->update([
'status' => self::STATUS_FAILED,
'status' => BackupStatus::Failed,
]);

return $this;
}

public function scopeCompleted(Builder $query): void
{
$query->where('status', static::STATUS_COMPLETED);
$query->where('status', BackupStatus::Completed);
}

public function scopeFailed(Builder $query): void
{
$query->where('status', static::STATUS_FAILED);
$query->where('status', BackupStatus::Failed);
}

public function handleProgress(string $type, string $progressOutput): self
Expand Down Expand Up @@ -301,14 +293,14 @@ public function findContent(string $searchFor, callable $handleSearchResult): bo
public function isPendingOrInProgress(): bool
{
return in_array($this->status, [
Backup::STATUS_PENDING,
Backup::STATUS_IN_PROGRESS,
BackupStatus::Pending,
BackupStatus::InProgress,
], true);
}

public function isCompleted(): bool
{
return $this->status === static::STATUS_COMPLETED;
return $this->status === BackupStatus::Completed;
}

public function fileList(string $relativeDirectory = '/'): FileList
Expand Down
6 changes: 4 additions & 2 deletions src/Models/Concerns/HasAsyncDelete.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

namespace Spatie\BackupServer\Models\Concerns;

use Spatie\BackupServer\Enums\BackupStatus;

trait HasAsyncDelete
{
public function asyncDelete(): void
{
$this->update(['status' => static::STATUS_DELETING]);
$this->update(['status' => BackupStatus::Deleting]);

$deletionJobClassName = $this->getDeletionJobClassName();

Expand All @@ -15,7 +17,7 @@ public function asyncDelete(): void

public function willBeDeleted(): bool
{
return $this->status === static::STATUS_DELETING;
return $this->status === BackupStatus::Deleting;
}

abstract public function getDeletionJobClassName(): string;
Expand Down
4 changes: 2 additions & 2 deletions src/Tasks/Backup/Actions/CreateBackupAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Spatie\BackupServer\Tasks\Backup\Actions;

use Spatie\BackupServer\Enums\BackupStatus;
use Spatie\BackupServer\Models\Backup;
use Spatie\BackupServer\Models\Source;
use Spatie\BackupServer\Support\Helpers\Enums\Task;
Expand Down Expand Up @@ -30,9 +31,8 @@ public function doNotUseQueue(): self

public function execute(Source $source): Backup
{
/** @var \Spatie\BackupServer\Models\Backup $backup */
$backup = Backup::create([
'status' => Backup::STATUS_PENDING,
'status' => BackupStatus::Pending,
'source_id' => $source->id,
'destination_id' => $source->destination->id,
'disk_name' => $source->destination->disk_name,
Expand Down
2 changes: 1 addition & 1 deletion tests/Factories/BackupFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public function source(Source $source): self

public function completed(): self
{
$this->status = Backup::STATUS_COMPLETED;
$this->status = BackupStatus::Completed;

return $this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Facades\Storage;
use Spatie\BackupServer\Enums\BackupStatus;
use Spatie\BackupServer\Models\Backup;
use Spatie\BackupServer\Models\Destination;
use Spatie\BackupServer\Models\Source;
Expand Down Expand Up @@ -99,7 +100,7 @@
TestTime::freeze();

$failedBackup = (new BackupFactory())->makeSureBackupDirectoryExists()->create([
'status' => Backup::STATUS_FAILED,
'status' => BackupStatus::Failed,
'created_at' => now(),
]);

Expand Down
15 changes: 8 additions & 7 deletions tests/Feature/Tasks/Backup/Jobs/PerformBackupJobTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
uses(\Spatie\BackupServer\Tests\TestCase::class);
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Storage;
use Spatie\BackupServer\Enums\BackupStatus;
use Spatie\BackupServer\Models\Backup;
use Spatie\BackupServer\Models\Source;
use Spatie\Docker\DockerContainer;
Expand Down Expand Up @@ -34,7 +35,7 @@

$this->artisan('backup-server:dispatch-backups')->assertExitCode(0);

expect($this->source->backups()->first()->status)->toBe(Backup::STATUS_COMPLETED);
expect($this->source->backups()->first()->status)->toBe(BackupStatus::Completed);
expect($this->source->backups()->first()->has('src/1.txt'))->toBeTrue();
expect($this->source->backups()->first()->has('src/exclude.txt'))->toBeFalse();
});
Expand All @@ -48,7 +49,7 @@

expect($this->source->backups()->first()->has('src/newfile.txt'))->toBeTrue();

expect($this->source->backups()->first()->status)->toBe(Backup::STATUS_COMPLETED);
expect($this->source->backups()->first()->status)->toBe(BackupStatus::Completed);
});

it('will mark the backup as failed if the pre backup commands cannot execute', function () {
Expand All @@ -58,7 +59,7 @@

$this->artisan('backup-server:dispatch-backups')->assertExitCode(0);

expect($this->source->backups()->first()->status)->toBe(Backup::STATUS_FAILED);
expect($this->source->backups()->first()->status)->toBe(BackupStatus::Failed);
});

it('can perform post backup commands', function () {
Expand All @@ -72,31 +73,31 @@

expect(trim($process->getOutput()))->toBe('ok');

expect($this->source->backups()->first()->status)->toBe(Backup::STATUS_COMPLETED);
expect($this->source->backups()->first()->status)->toBe(BackupStatus::Completed);
});

it('will mark the backup as failed if the post backup commands cannot execute', function () {
$this->source->update(['post_backup_commands' => ['invalid-command']]);

$this->artisan('backup-server:dispatch-backups')->assertExitCode(0);

expect($this->source->backups()->first()->status)->toBe(Backup::STATUS_FAILED);
expect($this->source->backups()->first()->status)->toBe(BackupStatus::Failed);
});

it('will fail if the source is not reachable', function () {
$this->source->update(['host' => 'non-existing-host']);

$this->artisan('backup-server:dispatch-backups')->assertExitCode(0);

expect($this->source->backups()->first()->status)->toBe(Backup::STATUS_FAILED);
expect($this->source->backups()->first()->status)->toBe(BackupStatus::Failed);
});

it('will fail if it cannot login', function () {
$this->source->update(['ssh_private_key_file' => null]);

$this->artisan('backup-server:dispatch-backups')->assertExitCode(0);

expect($this->source->backups()->first()->status)->toBe(Backup::STATUS_FAILED);
expect($this->source->backups()->first()->status)->toBe(BackupStatus::Failed);
});

afterEach(function () {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
$maximumSizeInMB = 1;

$backup = Backup::factory()->create([
'status' => Backup::STATUS_COMPLETED,
'status' => BackupStatus::Completed,
'real_size_in_kb' => $maximumSizeInMB * 1024,
]);

Expand All @@ -20,7 +20,7 @@
$this->assertHealthCheckSucceeds($healthCheck->getResult($destination));

Backup::factory()->create([
'status' => Backup::STATUS_COMPLETED,
'status' => BackupStatus::Completed,
'destination_id' => $destination->id,
]);

Expand All @@ -31,7 +31,7 @@
$maximumSizeInMB = 0;

$backup = Backup::factory()->create([
'status' => Backup::STATUS_COMPLETED,
'status' => BackupStatus::Completed,
'real_size_in_kb' => 2 * 1024,
]);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
$maximumSizeInMB = 1;

$backup = Backup::factory()->create([
'status' => Backup::STATUS_COMPLETED,
'status' => BackupStatus::Completed,
'real_size_in_kb' => $maximumSizeInMB * 1024,
]);

Expand All @@ -20,7 +20,7 @@
$this->assertHealthCheckSucceeds($healthCheck->getResult($source));

Backup::factory()->create([
'status' => Backup::STATUS_COMPLETED,
'status' => BackupStatus::Completed,
'source_id' => $source->id,
]);

Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/Models/BackupTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@

$backup->markAsCompleted();

expect($backup->status)->toEqual(Backup::STATUS_COMPLETED);
expect($backup->status)->toEqual(BackupStatus::Completed);
expect($backup->completed_at->format('YmdHis'))->toEqual(now()->format('YmdHis'));
});

Expand Down

0 comments on commit 9def80e

Please sign in to comment.