Skip to content

Commit

Permalink
Added the lastTimeSomethingHasHappenedWithIt() method to the JobExe…
Browse files Browse the repository at this point in the history
…cution model/interface
  • Loading branch information
fulopattila122 committed Nov 28, 2024
1 parent 1e33080 commit 95c5645
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/Contracts/JobExecution.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ public function logInfo(string $message, array $context = []): JobExecutionLog;

public function logDebug(string $message, array $context = []): JobExecutionLog;

public function lastTimeSomethingHasHappenedWithIt(): \DateTimeInterface;

/** @return Collection|JobExecutionLog[] */
public function getLogs(): Collection;

Expand Down
14 changes: 14 additions & 0 deletions src/Models/JobExecution.php
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,20 @@ public function getUser(): ?Authenticatable
return $this->user;
}

public function lastTimeSomethingHasHappenedWithIt(): \DateTimeInterface
{
$lastLogEventDate = $this->logs()->max('happened_at');
$dates = [
$lastLogEventDate ? Carbon::parse($lastLogEventDate) : null,
$this->queued_at,
$this->started_at,
$this->completed_at,
$this->failed_at,
];

return max(...$dates);
}

protected function scopeOfJobClass(Builder $query, string $jobClass): Builder
{
return $query->where('job_class', $jobClass);
Expand Down
89 changes: 89 additions & 0 deletions tests/JobExecutionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

namespace Konekt\History\Tests;

use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Bus;
use Illuminate\Support\Str;
use Konekt\History\JobTracker;
use Konekt\History\Models\JobExecution;
use Konekt\History\Models\JobStatus;
Expand Down Expand Up @@ -82,4 +84,91 @@ public function it_can_return_the_entries_of_a_given_job_class_and_limit_the_rec
$entries = JobExecution::byJobClass(SampleTrackableJob::class, false, 5);
$this->assertCount(5, $entries);
}

/** @test */
public function it_returns_the_queued_at_date_as_last_time_something_has_happened_to_it_when_there_are_no_logs_and_no_other_event_dates_recorded()
{
JobExecution::ofJobClass(SampleTrackableJob::class)->delete();

/** @var JobExecution $job */
$job = JobExecution::create([
'job_class' => SampleTrackableJob::class,
'tracking_id' => Str::ulid()->toBase58(),
'queued_at' => Carbon::parse('2024-11-27 11:35:27'),
]);

$this->assertEquals('2024-11-27 11:35:27', $job->lastTimeSomethingHasHappenedWithIt()->format('Y-m-d H:i:s'));
}

/** @test */
public function it_returns_the_started_at_date_as_last_time_something_has_happened_to_it_when_there_is_an_earlier_queued_at_date_but_there_are_no_logs_and_no_other_event_dates_recorded()
{
JobExecution::ofJobClass(SampleTrackableJob::class)->delete();

/** @var JobExecution $job */
$job = JobExecution::create([
'job_class' => SampleTrackableJob::class,
'tracking_id' => Str::ulid()->toBase58(),
'queued_at' => Carbon::parse('2024-11-27 11:35:27'),
'started_at' => Carbon::parse('2024-11-27 11:35:35'),
]);

$this->assertEquals('2024-11-27 11:35:35', $job->lastTimeSomethingHasHappenedWithIt()->format('Y-m-d H:i:s'));
}

/** @test */
public function it_returns_the_completed_at_date_as_last_time_something_has_happened_to_it_when_there_are_earlier_queued_at_and_started_at_dates_and_there_are_no_logs()
{
JobExecution::ofJobClass(SampleTrackableJob::class)->delete();

/** @var JobExecution $job */
$job = JobExecution::create([
'job_class' => SampleTrackableJob::class,
'tracking_id' => Str::ulid()->toBase58(),
'queued_at' => Carbon::parse('2024-11-27 11:35:27'),
'started_at' => Carbon::parse('2024-11-27 11:35:35'),
'completed_at' => Carbon::parse('2024-11-27 11:37:02'),
]);

$this->assertEquals('2024-11-27 11:37:02', $job->lastTimeSomethingHasHappenedWithIt()->format('Y-m-d H:i:s'));
}

/** @test */
public function it_returns_the_failed_at_date_as_last_time_something_has_happened_to_it_when_there_are_earlier_queued_at_and_started_at_dates_and_there_are_no_logs()
{
JobExecution::ofJobClass(SampleTrackableJob::class)->delete();

/** @var JobExecution $job */
$job = JobExecution::create([
'job_class' => SampleTrackableJob::class,
'tracking_id' => Str::ulid()->toBase58(),
'queued_at' => Carbon::parse('2024-11-27 11:35:27'),
'started_at' => Carbon::parse('2024-11-27 11:35:35'),
'failed_at' => Carbon::parse('2024-11-27 11:38:18'),
]);

$this->assertCount(0, $job->getLogs());
$this->assertEquals('2024-11-27 11:38:18', $job->lastTimeSomethingHasHappenedWithIt()->format('Y-m-d H:i:s'));
}

/** @test */
public function it_returns_the_latest_log_date_when_any_of_the_log_entries_are_later_then_the_status_timestamp_fields()
{
JobExecution::ofJobClass(SampleTrackableJob::class)->delete();

Carbon::setTestNow('2024-11-27 14:00:19');
/** @var JobExecution $job */
$job = JobExecution::create([
'job_class' => SampleTrackableJob::class,
'tracking_id' => Str::ulid()->toBase58(),
'queued_at' => Carbon::parse('2024-11-27 14:00:01'),
'started_at' => Carbon::parse('2024-11-27 14:00:05'),
'failed_at' => Carbon::parse('2024-11-27 14:00:18'),
]);
$job->logInfo('Some Happy Message');
Carbon::setTestNow('2024-11-27 14:00:20');
$job->logError('Another Error Message');

$this->assertEquals('2024-11-27 14:00:20', $job->lastTimeSomethingHasHappenedWithIt()->format('Y-m-d H:i:s'));
}
}

0 comments on commit 95c5645

Please sign in to comment.