jonnybarnes.uk/tests/Feature/WebMentionsControllerTest.php

94 lines
2.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
namespace Tests\Feature;
use App\Jobs\ProcessWebMention;
use App\Models\Note;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Queue;
use Tests\TestCase;
class WebMentionsControllerTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function webmentionEndpointCanServeBrowserRequest(): void
{
$response = $this->get('/webmention');
$response->assertViewIs('webmention-endpoint');
}
/**
* Test webmentions without source and target are rejected.
*
* @test
*/
public function webmentionsWithoutSourceAndTargetAreRejected(): void
{
$response = $this->call('POST', '/webmention', ['source' => 'https://example.org/post/123']);
$response->assertStatus(400);
}
/**
* Test invalid target gives a 400 response.
*
* In this case an invalid target is a URL that doesnt exist on our domain.
*
* @test
*/
public function invalidTargetReturnsErrorResponse(): void
{
$response = $this->call('POST', '/webmention', [
'source' => 'https://example.org/post/123',
'target' => config('app.url') . '/invalid/target',
]);
$response->assertStatus(400);
}
/**
* Test blog target gets a 501 response due to our not supporting it.
*
* @test
*/
public function blogTargetReturns501Response(): void
{
$response = $this->call('POST', '/webmention', [
'source' => 'https://example.org/post/123',
'target' => config('app.url') . '/blog/target',
]);
$response->assertStatus(501);
}
/**
* Test that a non-existent note gives a 400 response.
*
* @test
*/
public function nonexistentNoteReturnsErrorResponse(): void
{
$response = $this->call('POST', '/webmention', [
'source' => 'https://example.org/post/123',
'target' => config('app.url') . '/notes/ZZZZZ',
]);
$response->assertStatus(400);
}
/** @test */
public function legitimateWebmentionTriggersProcessWebmentionJob(): void
{
Queue::fake();
$note = Note::factory()->create();
$response = $this->call('POST', '/webmention', [
'source' => 'https://example.org/post/123',
'target' => $note->longurl,
]);
$response->assertStatus(202);
Queue::assertPushed(ProcessWebMention::class);
}
}