jonnybarnes.uk/tests/Unit/Jobs/SaveScreenshotJobTest.php

112 lines
4.7 KiB
PHP
Raw Normal View History

2023-01-20 16:02:04 +00:00
<?php
declare(strict_types=1);
namespace Tests\Unit\Jobs;
use App\Jobs\SaveScreenshot;
use App\Models\Bookmark;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
2023-01-20 16:02:04 +00:00
use Illuminate\Support\Facades\Storage;
2025-03-01 15:00:41 +00:00
use PHPUnit\Framework\Attributes\Test;
2023-01-20 16:02:04 +00:00
use Tests\TestCase;
class SaveScreenshotJobTest extends TestCase
{
use RefreshDatabase;
2025-03-01 15:00:41 +00:00
#[Test]
2025-04-06 17:25:06 +01:00
public function screenshot_is_saved_by_job(): void
2023-01-20 16:02:04 +00:00
{
Storage::fake('public');
Http::fake([
'api.cloudconvert.com/v2/capture-website' => Http::response([
'data' => ['id' => '68d52633-e170-465e-b13e-746c97d01ffb', 'status' => 'finished'],
], 201),
'api.cloudconvert.com/v2/tasks/68d52633-e170-465e-b13e-746c97d01ffb*' => Http::response([
'data' => ['id' => '68d52633-e170-465e-b13e-746c97d01ffb', 'status' => 'finished'],
], 200),
'api.cloudconvert.com/v2/export/url' => Http::response([
'data' => ['id' => '27f33137-cc03-4468-aba4-1e1aa8c096fb', 'status' => 'finished'],
], 201),
'api.cloudconvert.com/v2/tasks/27f33137-cc03-4468-aba4-1e1aa8c096fb*' => Http::response([
'data' => [
'id' => '27f33137-cc03-4468-aba4-1e1aa8c096fb',
'status' => 'finished',
'result' => [
'files' => [[
'url' => 'https://storage.cloudconvert.com/tasks/27f33137-cc03-4468-aba4-1e1aa8c096fb/theverge.com.png',
]],
],
],
], 200),
'storage.cloudconvert.com/*' => Http::response(
file_get_contents(__DIR__.'/../../theverge.com.png'),
200,
['Content-Type' => 'image/png']
),
2023-01-20 16:02:04 +00:00
]);
$bookmark = Bookmark::factory()->create();
$job = new SaveScreenshot($bookmark);
$job->handle();
$bookmark->refresh();
$this->assertEquals('68d52633-e170-465e-b13e-746c97d01ffb', $bookmark->screenshot);
2026-04-07 09:01:19 +01:00
Storage::disk('public')->assertExists('/assets/img/bookmarks/'.$bookmark->screenshot.'.png');
// capture-website, 1x poll (finished immediately), export/url, 1x poll (finished immediately), download
Http::assertSentCount(5);
2023-01-20 16:02:04 +00:00
}
2025-03-01 15:00:41 +00:00
#[Test]
2025-04-06 17:25:06 +01:00
public function screenshot_job_handles_unfinished_tasks(): void
2023-01-20 16:02:04 +00:00
{
Storage::fake('public');
Http::fake([
'api.cloudconvert.com/v2/capture-website' => Http::response([
'data' => ['id' => '68d52633-e170-465e-b13e-746c97d01ffb', 'status' => 'waiting'],
], 201),
'api.cloudconvert.com/v2/tasks/68d52633-e170-465e-b13e-746c97d01ffb*' => Http::sequence()
->push(['data' => ['id' => '68d52633-e170-465e-b13e-746c97d01ffb', 'status' => 'waiting']], 200)
->push(['data' => ['id' => '68d52633-e170-465e-b13e-746c97d01ffb', 'status' => 'finished']], 200),
'api.cloudconvert.com/v2/export/url' => Http::response([
'data' => ['id' => '27f33137-cc03-4468-aba4-1e1aa8c096fb', 'status' => 'waiting'],
], 201),
'api.cloudconvert.com/v2/tasks/27f33137-cc03-4468-aba4-1e1aa8c096fb*' => Http::sequence()
->push(['data' => ['id' => '27f33137-cc03-4468-aba4-1e1aa8c096fb', 'status' => 'waiting']], 200)
->push([
'data' => [
'id' => '27f33137-cc03-4468-aba4-1e1aa8c096fb',
'status' => 'finished',
'result' => [
'files' => [[
'url' => 'https://storage.cloudconvert.com/tasks/27f33137-cc03-4468-aba4-1e1aa8c096fb/theverge.com.png',
]],
],
],
], 200),
'storage.cloudconvert.com/*' => Http::response(
file_get_contents(__DIR__.'/../../theverge.com.png'),
200,
['Content-Type' => 'image/png']
),
2023-01-20 16:02:04 +00:00
]);
$bookmark = Bookmark::factory()->create();
$job = new SaveScreenshot($bookmark);
$job->handle();
$bookmark->refresh();
$this->assertEquals('68d52633-e170-465e-b13e-746c97d01ffb', $bookmark->screenshot);
2026-04-07 09:01:19 +01:00
Storage::disk('public')->assertExists('/assets/img/bookmarks/'.$bookmark->screenshot.'.png');
// capture-website, 2x poll (waiting then finished), export/url, 2x poll (waiting then finished), download
Http::assertSentCount(7);
// Also assert every queued response in each sequence was consumed, no more no less
Http::assertSequencesAreEmpty();
2023-01-20 16:02:04 +00:00
}
}