Add Announce validator and test

This commit is contained in:
Daniel Supernault 2018-12-29 23:10:14 -07:00
parent b6757550f2
commit c78686e355
No known key found for this signature in database
GPG key ID: 0DEF1C662C9033F7
2 changed files with 196 additions and 0 deletions

View file

@ -0,0 +1,28 @@
<?php
namespace App\Util\ActivityPub\Validator;
use Validator;
use Illuminate\Validation\Rule;
class Announce {
public static function validate($payload)
{
$valid = Validator::make($payload, [
'@context' => 'required',
'id' => 'required|string',
'type' => [
'required',
Rule::in(['Announce'])
],
'actor' => 'required|url|active_url',
'published' => 'required|date',
'to' => 'required',
'cc' => 'required',
'object' => 'required|url|active_url'
])->passes();
return $valid;
}
}

View file

@ -0,0 +1,168 @@
<?php
namespace Tests\Unit\ActivityPub\Verb;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Util\ActivityPub\Validator\Announce;
class AnnounceTest extends TestCase
{
public function setUp()
{
parent::setUp();
$this->validAnnounce = [
"@context" => "https://www.w3.org/ns/activitystreams",
"id" => "https://example.org/users/alice/statuses/100000000000001/activity",
"type" => "Announce",
"actor" => "https://example.org/users/alice",
"published" => "2018-12-31T23:59:59Z",
"to" => [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc" => [
"https://example.org/users/bob",
"https://example.org/users/alice/followers"
],
"object" => "https://example.org/p/bob/100000000000000",
];
$this->invalidAnnounce = [
"@context" => "https://www.w3.org/ns/activitystreams",
"id" => "https://example.org/users/alice/statuses/100000000000001/activity",
"type" => "Announce2",
"actor" => "https://example.org/users/alice",
"published" => "2018-12-31T23:59:59Z",
"to" => [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc" => [
"https://example.org/users/bob",
"https://example.org/users/alice/followers"
],
"object" => "https://example.org/p/bob/100000000000000",
];
$this->invalidDate = [
"@context" => "https://www.w3.org/ns/activitystreams",
"id" => "https://example.org/users/alice/statuses/100000000000001/activity",
"type" => "Announce",
"actor" => "https://example.org/users/alice",
"published" => "2018-12-31T23:59:59ZEZE",
"to" => [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc" => [
"https://example.org/users/bob",
"https://example.org/users/alice/followers"
],
"object" => "https://example.org/p/bob/100000000000000",
];
$this->contextMissing = [
"id" => "https://example.org/users/alice/statuses/100000000000001/activity",
"type" => "Announce",
"actor" => "https://example.org/users/alice",
"published" => "2018-12-31T23:59:59Z",
"to" => [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc" => [
"https://example.org/users/bob",
"https://example.org/users/alice/followers"
],
"object" => "https://example.org/p/bob/100000000000000",
];
$this->audienceMissing = [
"id" => "https://example.org/users/alice/statuses/100000000000001/activity",
"type" => "Announce",
"actor" => "https://example.org/users/alice",
"published" => "2018-12-31T23:59:59Z",
"object" => "https://example.org/p/bob/100000000000000",
];
$this->audienceMissing2 = [
"@context" => "https://www.w3.org/ns/activitystreams",
"id" => "https://example.org/users/alice/statuses/100000000000001/activity",
"type" => "Announce",
"actor" => "https://example.org/users/alice",
"published" => "2018-12-31T23:59:59Z",
"to" => null,
"cc" => null,
"object" => "https://example.org/p/bob/100000000000000",
];
$this->invalidActor = [
"@context" => "https://www.w3.org/ns/activitystreams",
"id" => "https://example.org/users/alice/statuses/100000000000001/activity",
"type" => "Announce",
"actor" => "10000",
"published" => "2018-12-31T23:59:59Z",
"to" => [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc" => [
"https://example.org/users/bob",
"https://example.org/users/alice/followers"
],
"object" => "https://example.org/p/bob/100000000000000",
];
$this->invalidActor2 = [
"@context" => "https://www.w3.org/ns/activitystreams",
"id" => "https://example.org/users/alice/statuses/100000000000001/activity",
"type" => "Announce",
"published" => "2018-12-31T23:59:59Z",
"to" => [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc" => [
"https://example.org/users/bob",
"https://example.org/users/alice/followers"
],
"object" => "https://example.org/p/bob/100000000000000",
];
}
/** @test */
public function basic_accept()
{
$this->assertTrue(Announce::validate($this->validAnnounce));
}
/** @test */
public function invalid_accept()
{
$this->assertFalse(Announce::validate($this->invalidAnnounce));
}
/** @test */
public function invalid_date()
{
$this->assertFalse(Announce::validate($this->invalidDate));
}
/** @test */
public function context_missing()
{
$this->assertFalse(Announce::validate($this->contextMissing));
}
/** @test */
public function audience_missing()
{
$this->assertFalse(Announce::validate($this->audienceMissing));
$this->assertFalse(Announce::validate($this->audienceMissing2));
}
/** @test */
public function invalid_actor()
{
$this->assertFalse(Announce::validate($this->invalidActor));
$this->assertFalse(Announce::validate($this->invalidActor2));
}
}