Clean up styling in the tests

This commit is contained in:
Sven Luijten 2022-12-21 22:21:07 +01:00
parent 7063b8033f
commit 13d359a3c5
No known key found for this signature in database
GPG key ID: A411BB3A2B88947F
23 changed files with 994 additions and 1025 deletions

View file

@ -3,6 +3,7 @@
namespace Tests; namespace Tests;
use Illuminate\Contracts\Console\Kernel; use Illuminate\Contracts\Console\Kernel;
use Illuminate\Foundation\Application;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
trait CreatesApplication trait CreatesApplication
@ -10,11 +11,11 @@ trait CreatesApplication
/** /**
* Creates the application. * Creates the application.
* *
* @return \Illuminate\Foundation\Application * @return Application
*/ */
public function createApplication() public function createApplication()
{ {
$app = require __DIR__.'/../bootstrap/app.php'; $app = require __DIR__ . '/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap(); $app->make(Kernel::class)->bootstrap();

View file

@ -3,19 +3,17 @@
namespace Tests\Feature; namespace Tests\Feature;
use Tests\TestCase; use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
class InstalledTest extends TestCase class InstalledTest extends TestCase
{ {
/** @test */
/** @test */ public function nodeinfo_api(): void
public function nodeinfo_api() {
{ $response = $this->get('/.well-known/nodeinfo');
$response = $this->get('/.well-known/nodeinfo'); $response->assertJson([
$response->assertJson([ 'links' => [
'links' => [ ['rel' => 'http://nodeinfo.diaspora.software/ns/schema/2.0'],
['rel' => 'http://nodeinfo.diaspora.software/ns/schema/2.0'], ],
], ]); ]);
} }
} }

View file

@ -3,17 +3,14 @@
namespace Tests\Feature; namespace Tests\Feature;
use Tests\TestCase; use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use App\User;
class LoginTest extends TestCase class LoginTest extends TestCase
{ {
/** @test */ /** @test */
public function view_login_page() public function view_login_page()
{ {
$response = $this->get('login'); $response = $this->get('login');
$response->assertSee('Forgot Password'); $response->assertSee('Forgot Password');
} }
} }

View file

@ -2,85 +2,83 @@
namespace Tests\Unit; namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Util\ActivityPub\Helpers; use App\Util\ActivityPub\Helpers;
use Tests\TestCase;
class APAnnounceStrategyTest extends TestCase class APAnnounceStrategyTest extends TestCase
{ {
public function setUp(): void public function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->invalid = [ $this->invalid = [
'id' => 'test', 'id' => 'test',
'type' => 'Announce', 'type' => 'Announce',
'actor' => null, 'actor' => null,
'published' => '', 'published' => '',
'to' => ['test'], 'to' => ['test'],
'cc' => 'test', 'cc' => 'test',
'object' => 'test' 'object' => 'test'
]; ];
$this->mastodon = json_decode('{"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"manuallyApprovesFollowers":"as:manuallyApprovesFollowers","sensitive":"as:sensitive","movedTo":{"@id":"as:movedTo","@type":"@id"},"Hashtag":"as:Hashtag","ostatus":"http://ostatus.org#","atomUri":"ostatus:atomUri","inReplyToAtomUri":"ostatus:inReplyToAtomUri","conversation":"ostatus:conversation","toot":"http://joinmastodon.org/ns#","Emoji":"toot:Emoji","focalPoint":{"@container":"@list","@id":"toot:focalPoint"},"featured":{"@id":"toot:featured","@type":"@id"},"schema":"http://schema.org#","PropertyValue":"schema:PropertyValue","value":"schema:value"}],"id":"https://mastodon.social/users/dansup/statuses/100784657480587830/activity","type":"Announce","actor":"https://mastodon.social/users/dansup","published":"2018-09-25T05:03:49Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://pleroma.site/users/pixeldev","https://mastodon.social/users/dansup/followers"],"object":"https://pleroma.site/objects/68b5c876-f52b-4819-8d81-de6839d73fbc","atomUri":"https://mastodon.social/users/dansup/statuses/100784657480587830/activity"}', true); $this->mastodon = json_decode('{"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"manuallyApprovesFollowers":"as:manuallyApprovesFollowers","sensitive":"as:sensitive","movedTo":{"@id":"as:movedTo","@type":"@id"},"Hashtag":"as:Hashtag","ostatus":"http://ostatus.org#","atomUri":"ostatus:atomUri","inReplyToAtomUri":"ostatus:inReplyToAtomUri","conversation":"ostatus:conversation","toot":"http://joinmastodon.org/ns#","Emoji":"toot:Emoji","focalPoint":{"@container":"@list","@id":"toot:focalPoint"},"featured":{"@id":"toot:featured","@type":"@id"},"schema":"http://schema.org#","PropertyValue":"schema:PropertyValue","value":"schema:value"}],"id":"https://mastodon.social/users/dansup/statuses/100784657480587830/activity","type":"Announce","actor":"https://mastodon.social/users/dansup","published":"2018-09-25T05:03:49Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://pleroma.site/users/pixeldev","https://mastodon.social/users/dansup/followers"],"object":"https://pleroma.site/objects/68b5c876-f52b-4819-8d81-de6839d73fbc","atomUri":"https://mastodon.social/users/dansup/statuses/100784657480587830/activity"}', true);
$this->pleroma = json_decode('{"@context":"https://www.w3.org/ns/activitystreams","actor":"https://pleroma.site/users/pixeldev","cc":["https://www.w3.org/ns/activitystreams#Public"],"context":"tag:mastodon.social,2018-10-14:objectId=59146153:objectType=Conversation","context_id":12325955,"id":"https://pleroma.site/activities/db2273eb-d504-4e3a-8f74-c343d069755a","object":"https://mastodon.social/users/dansup/statuses/100891324792793720","published":"2018-10-14T01:22:18.554227Z","to":["https://pleroma.site/users/pixeldev/followers","https://mastodon.social/users/dansup"],"type":"Announce"}', true); $this->pleroma = json_decode('{"@context":"https://www.w3.org/ns/activitystreams","actor":"https://pleroma.site/users/pixeldev","cc":["https://www.w3.org/ns/activitystreams#Public"],"context":"tag:mastodon.social,2018-10-14:objectId=59146153:objectType=Conversation","context_id":12325955,"id":"https://pleroma.site/activities/db2273eb-d504-4e3a-8f74-c343d069755a","object":"https://mastodon.social/users/dansup/statuses/100891324792793720","published":"2018-10-14T01:22:18.554227Z","to":["https://pleroma.site/users/pixeldev/followers","https://mastodon.social/users/dansup"],"type":"Announce"}', true);
} }
public function testBasicValidation() public function testBasicValidation()
{ {
$this->assertFalse(Helpers::validateObject($this->invalid)); $this->assertFalse(Helpers::validateObject($this->invalid));
} }
public function testMastodonValidation() public function testMastodonValidation()
{ {
$this->assertTrue(Helpers::validateObject($this->mastodon)); $this->assertTrue(Helpers::validateObject($this->mastodon));
} }
public function testPleromaValidation() public function testPleromaValidation()
{ {
$this->assertTrue(Helpers::validateObject($this->pleroma)); $this->assertTrue(Helpers::validateObject($this->pleroma));
} }
public function testMastodonAudienceScope() public function testMastodonAudienceScope()
{ {
$scope = Helpers::normalizeAudience($this->mastodon, false); $scope = Helpers::normalizeAudience($this->mastodon, false);
$actual = [ $actual = [
"to" => [], 'to' => [],
"cc" => [ 'cc' => [
"https://pleroma.site/users/pixeldev", 'https://pleroma.site/users/pixeldev',
"https://mastodon.social/users/dansup/followers", 'https://mastodon.social/users/dansup/followers',
], ],
"scope" => "public", 'scope' => 'public',
]; ];
$this->assertEquals($scope, $actual); $this->assertEquals($scope, $actual);
} }
public function testPleromaAudienceScope() public function testPleromaAudienceScope()
{ {
$scope = Helpers::normalizeAudience($this->pleroma, false); $scope = Helpers::normalizeAudience($this->pleroma, false);
$actual = [ $actual = [
"to" => [ 'to' => [
"https://pleroma.site/users/pixeldev/followers", 'https://pleroma.site/users/pixeldev/followers',
"https://mastodon.social/users/dansup", 'https://mastodon.social/users/dansup',
], ],
"cc" => [], 'cc' => [],
"scope" => "unlisted", 'scope' => 'unlisted',
]; ];
$this->assertEquals($scope, $actual); $this->assertEquals($scope, $actual);
} }
public function testInvalidAudienceScope() public function testInvalidAudienceScope()
{ {
$scope = Helpers::normalizeAudience($this->invalid, false); $scope = Helpers::normalizeAudience($this->invalid, false);
$actual = [ $actual = [
'to' => [], 'to' => [],
'cc' => [], 'cc' => [],
'scope' => 'private' 'scope' => 'private'
]; ];
$this->assertEquals($scope, $actual); $this->assertEquals($scope, $actual);
} }
} }

View file

@ -2,85 +2,85 @@
namespace Tests\Unit\ActivityPub; namespace Tests\Unit\ActivityPub;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Util\ActivityPub\Helpers; use App\Util\ActivityPub\Helpers;
use Tests\TestCase;
class AudienceScopeTest extends TestCase class AudienceScopeTest extends TestCase
{ {
public function setUp(): void protected array $invalid;
{
parent::setUp();
$this->invalid = [ public function setUp(): void
'id' => 'test', {
'type' => 'Announce', parent::setUp();
'actor' => null,
'published' => '',
'to' => ['test'],
'cc' => 'test',
'object' => 'test'
];
$this->mastodon = json_decode('{"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"manuallyApprovesFollowers":"as:manuallyApprovesFollowers","sensitive":"as:sensitive","movedTo":{"@id":"as:movedTo","@type":"@id"},"Hashtag":"as:Hashtag","ostatus":"http://ostatus.org#","atomUri":"ostatus:atomUri","inReplyToAtomUri":"ostatus:inReplyToAtomUri","conversation":"ostatus:conversation","toot":"http://joinmastodon.org/ns#","Emoji":"toot:Emoji","focalPoint":{"@container":"@list","@id":"toot:focalPoint"},"featured":{"@id":"toot:featured","@type":"@id"},"schema":"http://schema.org#","PropertyValue":"schema:PropertyValue","value":"schema:value"}],"id":"https://mastodon.social/users/dansup/statuses/100784657480587830/activity","type":"Announce","actor":"https://mastodon.social/users/dansup","published":"2018-09-25T05:03:49Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://pleroma.site/users/pixeldev","https://mastodon.social/users/dansup/followers"],"object":"https://pleroma.site/objects/68b5c876-f52b-4819-8d81-de6839d73fbc","atomUri":"https://mastodon.social/users/dansup/statuses/100784657480587830/activity"}', true); $this->invalid = [
'id' => 'test',
'type' => 'Announce',
'actor' => null,
'published' => '',
'to' => ['test'],
'cc' => 'test',
'object' => 'test'
];
$this->pleroma = json_decode('{"@context":"https://www.w3.org/ns/activitystreams","actor":"https://pleroma.site/users/pixeldev","cc":["https://www.w3.org/ns/activitystreams#Public"],"context":"tag:mastodon.social,2018-10-14:objectId=59146153:objectType=Conversation","context_id":12325955,"id":"https://pleroma.site/activities/db2273eb-d504-4e3a-8f74-c343d069755a","object":"https://mastodon.social/users/dansup/statuses/100891324792793720","published":"2018-10-14T01:22:18.554227Z","to":["https://pleroma.site/users/pixeldev/followers","https://mastodon.social/users/dansup"],"type":"Announce"}', true); $this->mastodon = json_decode('{"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"manuallyApprovesFollowers":"as:manuallyApprovesFollowers","sensitive":"as:sensitive","movedTo":{"@id":"as:movedTo","@type":"@id"},"Hashtag":"as:Hashtag","ostatus":"http://ostatus.org#","atomUri":"ostatus:atomUri","inReplyToAtomUri":"ostatus:inReplyToAtomUri","conversation":"ostatus:conversation","toot":"http://joinmastodon.org/ns#","Emoji":"toot:Emoji","focalPoint":{"@container":"@list","@id":"toot:focalPoint"},"featured":{"@id":"toot:featured","@type":"@id"},"schema":"http://schema.org#","PropertyValue":"schema:PropertyValue","value":"schema:value"}],"id":"https://mastodon.social/users/dansup/statuses/100784657480587830/activity","type":"Announce","actor":"https://mastodon.social/users/dansup","published":"2018-09-25T05:03:49Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://pleroma.site/users/pixeldev","https://mastodon.social/users/dansup/followers"],"object":"https://pleroma.site/objects/68b5c876-f52b-4819-8d81-de6839d73fbc","atomUri":"https://mastodon.social/users/dansup/statuses/100784657480587830/activity"}', true);
}
public function testBasicValidation() $this->pleroma = json_decode('{"@context":"https://www.w3.org/ns/activitystreams","actor":"https://pleroma.site/users/pixeldev","cc":["https://www.w3.org/ns/activitystreams#Public"],"context":"tag:mastodon.social,2018-10-14:objectId=59146153:objectType=Conversation","context_id":12325955,"id":"https://pleroma.site/activities/db2273eb-d504-4e3a-8f74-c343d069755a","object":"https://mastodon.social/users/dansup/statuses/100891324792793720","published":"2018-10-14T01:22:18.554227Z","to":["https://pleroma.site/users/pixeldev/followers","https://mastodon.social/users/dansup"],"type":"Announce"}', true);
{ }
$this->assertFalse(Helpers::validateObject($this->invalid));
}
public function testMastodonValidation() public function testBasicValidation()
{ {
$this->assertTrue(Helpers::validateObject($this->mastodon)); $this->assertFalse(Helpers::validateObject($this->invalid));
} }
public function testPleromaValidation() public function testMastodonValidation()
{ {
$this->assertTrue(Helpers::validateObject($this->pleroma)); $this->assertTrue(Helpers::validateObject($this->mastodon));
} }
public function testMastodonAudienceScope() public function testPleromaValidation()
{ {
$scope = Helpers::normalizeAudience($this->mastodon, false); $this->assertTrue(Helpers::validateObject($this->pleroma));
$actual = [ }
"to" => [],
"cc" => [
"https://pleroma.site/users/pixeldev",
"https://mastodon.social/users/dansup/followers",
],
"scope" => "public",
];
$this->assertEquals($scope, $actual); public function testMastodonAudienceScope()
} {
$scope = Helpers::normalizeAudience($this->mastodon, false);
$actual = [
'to' => [],
'cc' => [
'https://pleroma.site/users/pixeldev',
'https://mastodon.social/users/dansup/followers',
],
'scope' => 'public',
];
public function testPleromaAudienceScope() $this->assertEquals($scope, $actual);
{ }
$scope = Helpers::normalizeAudience($this->pleroma, false);
$actual = [
"to" => [
"https://pleroma.site/users/pixeldev/followers",
"https://mastodon.social/users/dansup",
],
"cc" => [],
"scope" => "unlisted",
];
$this->assertEquals($scope, $actual); public function testPleromaAudienceScope()
} {
$scope = Helpers::normalizeAudience($this->pleroma, false);
$actual = [
'to' => [
'https://pleroma.site/users/pixeldev/followers',
'https://mastodon.social/users/dansup',
],
'cc' => [],
'scope' => 'unlisted',
];
public function testInvalidAudienceScope() $this->assertEquals($scope, $actual);
{ }
$scope = Helpers::normalizeAudience($this->invalid, false);
$actual = [ public function testInvalidAudienceScope()
'to' => [], {
'cc' => [], $scope = Helpers::normalizeAudience($this->invalid, false);
'scope' => 'private' $actual = [
]; 'to' => [],
$this->assertEquals($scope, $actual); 'cc' => [],
} 'scope' => 'private'
];
$this->assertEquals($scope, $actual);
}
} }

View file

@ -4,41 +4,42 @@ namespace Tests\Unit\ActivityPub;
use App\Util\ActivityPub\Helpers; use App\Util\ActivityPub\Helpers;
use Tests\TestCase; use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class NoteAttachmentTest extends TestCase class NoteAttachmentTest extends TestCase
{ {
protected array $pleroma;
protected array $mastodon;
protected array $invalidType;
protected array $invalidMime;
public function setUp(): void public function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->pleroma = json_decode('{"@context":"https://www.w3.org/ns/activitystreams","actor":"https://pleroma.site/users/pixeldev","cc":["https://pleroma.site/users/pixeldev/followers"],"context":"https://pleroma.site/contexts/cbe919c6-238e-4e5d-9065-fcb3c312b56a","context_id":8651628,"id":"https://pleroma.site/activities/65b2c43f-f33e-438e-b141-4e2047b43012","object":{"actor":"https://pleroma.site/users/pixeldev","announcement_count":2,"announcements":["https://playvicious.social/users/jalcine","https://mastodon.social/users/dansup"],"attachment":[{"mediaType":"image/png","name":"Screen Shot 2018-09-08 at 10.59.38 PM.png","type":"Document","url":"https://s3.wasabisys.com/pleroma-site/1c49e1f9-1187-404d-a063-1b37ecec44e9/Screen Shot 2018-09-08 at 10.59.38 PM.png"},{"mediaType":"image/jpeg","name":"archer-danger-zone.jpg","type":"Document","url":"https://s3.wasabisys.com/pleroma-site/cd70cdb6-0148-4dcb-bac6-11fd4aa59834/archer-danger-zone.jpg"}],"attributedTo":"https://pleroma.site/users/pixeldev","cc":["https://pleroma.site/users/pixeldev/followers"],"content":"New middleware for specific actions, acts like sudo requiring periodic password verification. <a href=\'https://pleroma.site/tag/dangerzone\' rel=\'tag\'>#dangerZone</a>","context":"https://pleroma.site/contexts/cbe919c6-238e-4e5d-9065-fcb3c312b56a","context_id":8651628,"conversation":"https://pleroma.site/contexts/cbe919c6-238e-4e5d-9065-fcb3c312b56a","emoji":{},"id":"https://pleroma.site/objects/b7576ec9-ae2b-4076-a426-0d8a65b23876","published":"2018-09-09T05:05:53.763752Z","sensitive":false,"summary":"","tag":[{"href":"https://pleroma.site/tags/dangerzone","name":"#dangerzone","type":"Hashtag"}],"to":["https://www.w3.org/ns/activitystreams#Public"],"type":"Note"},"published":"2018-09-09T05:05:53.749866Z","to":["https://www.w3.org/ns/activitystreams#Public"],"type":"Create"}', true, 9); $this->pleroma = json_decode('{"@context":"https://www.w3.org/ns/activitystreams","actor":"https://pleroma.site/users/pixeldev","cc":["https://pleroma.site/users/pixeldev/followers"],"context":"https://pleroma.site/contexts/cbe919c6-238e-4e5d-9065-fcb3c312b56a","context_id":8651628,"id":"https://pleroma.site/activities/65b2c43f-f33e-438e-b141-4e2047b43012","object":{"actor":"https://pleroma.site/users/pixeldev","announcement_count":2,"announcements":["https://playvicious.social/users/jalcine","https://mastodon.social/users/dansup"],"attachment":[{"mediaType":"image/png","name":"Screen Shot 2018-09-08 at 10.59.38 PM.png","type":"Document","url":"https://s3.wasabisys.com/pleroma-site/1c49e1f9-1187-404d-a063-1b37ecec44e9/Screen Shot 2018-09-08 at 10.59.38 PM.png"},{"mediaType":"image/jpeg","name":"archer-danger-zone.jpg","type":"Document","url":"https://s3.wasabisys.com/pleroma-site/cd70cdb6-0148-4dcb-bac6-11fd4aa59834/archer-danger-zone.jpg"}],"attributedTo":"https://pleroma.site/users/pixeldev","cc":["https://pleroma.site/users/pixeldev/followers"],"content":"New middleware for specific actions, acts like sudo requiring periodic password verification. <a href=\'https://pleroma.site/tag/dangerzone\' rel=\'tag\'>#dangerZone</a>","context":"https://pleroma.site/contexts/cbe919c6-238e-4e5d-9065-fcb3c312b56a","context_id":8651628,"conversation":"https://pleroma.site/contexts/cbe919c6-238e-4e5d-9065-fcb3c312b56a","emoji":{},"id":"https://pleroma.site/objects/b7576ec9-ae2b-4076-a426-0d8a65b23876","published":"2018-09-09T05:05:53.763752Z","sensitive":false,"summary":"","tag":[{"href":"https://pleroma.site/tags/dangerzone","name":"#dangerzone","type":"Hashtag"}],"to":["https://www.w3.org/ns/activitystreams#Public"],"type":"Note"},"published":"2018-09-09T05:05:53.749866Z","to":["https://www.w3.org/ns/activitystreams#Public"],"type":"Create"}', true, 9);
$this->mastodon = json_decode('{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791/activity","type":"Create","actor":"https://mastodon.social/users/dansup","published":"2018-10-13T18:43:33Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"object":{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791","type":"Note","summary":null,"inReplyTo":null,"published":"2018-10-13T18:43:33Z","url":"https://mastodon.social/@dansup/100889802384218791","attributedTo":"https://mastodon.social/users/dansup","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"sensitive":false,"atomUri":"https://mastodon.social/users/dansup/statuses/100889802384218791","inReplyToAtomUri":null,"conversation":"tag:mastodon.social,2018-10-13:objectId=59103420:objectType=Conversation","content":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>","contentMap":{"en":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>"},"attachment":[{"type":"Document","mediaType":"image/jpeg","url":"https://files.mastodon.social/media_attachments/files/007/110/573/original/96a196885a77c9a4.jpg","name":null}],"tag":[{"type":"Hashtag","href":"https://mastodon.social/tags/coffee","name":"#coffee"}]}}', true, 9); $this->mastodon = json_decode('{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791/activity","type":"Create","actor":"https://mastodon.social/users/dansup","published":"2018-10-13T18:43:33Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"object":{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791","type":"Note","summary":null,"inReplyTo":null,"published":"2018-10-13T18:43:33Z","url":"https://mastodon.social/@dansup/100889802384218791","attributedTo":"https://mastodon.social/users/dansup","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"sensitive":false,"atomUri":"https://mastodon.social/users/dansup/statuses/100889802384218791","inReplyToAtomUri":null,"conversation":"tag:mastodon.social,2018-10-13:objectId=59103420:objectType=Conversation","content":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>","contentMap":{"en":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>"},"attachment":[{"type":"Document","mediaType":"image/jpeg","url":"https://files.mastodon.social/media_attachments/files/007/110/573/original/96a196885a77c9a4.jpg","name":null}],"tag":[{"type":"Hashtag","href":"https://mastodon.social/tags/coffee","name":"#coffee"}]}}', true, 9);
$this->invalidType = json_decode('{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791/activity","type":"Create","actor":"https://mastodon.social/users/dansup","published":"2018-10-13T18:43:33Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"object":{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791","type":"Note","summary":null,"inReplyTo":null,"published":"2018-10-13T18:43:33Z","url":"https://mastodon.social/@dansup/100889802384218791","attributedTo":"https://mastodon.social/users/dansup","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"sensitive":false,"atomUri":"https://mastodon.social/users/dansup/statuses/100889802384218791","inReplyToAtomUri":null,"conversation":"tag:mastodon.social,2018-10-13:objectId=59103420:objectType=Conversation","content":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>","contentMap":{"en":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>"},"attachment":[{"type":"NotDocument","mediaType":"image/jpeg","url":"https://files.mastodon.social/media_attachments/files/007/110/573/original/96a196885a77c9a4.jpg","name":null}],"tag":[{"type":"Hashtag","href":"https://mastodon.social/tags/coffee","name":"#coffee"}]}}', true, 9); $this->invalidType = json_decode('{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791/activity","type":"Create","actor":"https://mastodon.social/users/dansup","published":"2018-10-13T18:43:33Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"object":{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791","type":"Note","summary":null,"inReplyTo":null,"published":"2018-10-13T18:43:33Z","url":"https://mastodon.social/@dansup/100889802384218791","attributedTo":"https://mastodon.social/users/dansup","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"sensitive":false,"atomUri":"https://mastodon.social/users/dansup/statuses/100889802384218791","inReplyToAtomUri":null,"conversation":"tag:mastodon.social,2018-10-13:objectId=59103420:objectType=Conversation","content":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>","contentMap":{"en":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>"},"attachment":[{"type":"NotDocument","mediaType":"image/jpeg","url":"https://files.mastodon.social/media_attachments/files/007/110/573/original/96a196885a77c9a4.jpg","name":null}],"tag":[{"type":"Hashtag","href":"https://mastodon.social/tags/coffee","name":"#coffee"}]}}', true, 9);
$this->invalidMime = json_decode('{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791/activity","type":"Create","actor":"https://mastodon.social/users/dansup","published":"2018-10-13T18:43:33Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"object":{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791","type":"Note","summary":null,"inReplyTo":null,"published":"2018-10-13T18:43:33Z","url":"https://mastodon.social/@dansup/100889802384218791","attributedTo":"https://mastodon.social/users/dansup","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"sensitive":false,"atomUri":"https://mastodon.social/users/dansup/statuses/100889802384218791","inReplyToAtomUri":null,"conversation":"tag:mastodon.social,2018-10-13:objectId=59103420:objectType=Conversation","content":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>","contentMap":{"en":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>"},"attachment":[{"type":"Document","mediaType":"image/webp","url":"https://files.mastodon.social/media_attachments/files/007/110/573/original/96a196885a77c9a4.jpg","name":null}],"tag":[{"type":"Hashtag","href":"https://mastodon.social/tags/coffee","name":"#coffee"}]}}', true, 9); $this->invalidMime = json_decode('{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791/activity","type":"Create","actor":"https://mastodon.social/users/dansup","published":"2018-10-13T18:43:33Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"object":{"id":"https://mastodon.social/users/dansup/statuses/100889802384218791","type":"Note","summary":null,"inReplyTo":null,"published":"2018-10-13T18:43:33Z","url":"https://mastodon.social/@dansup/100889802384218791","attributedTo":"https://mastodon.social/users/dansup","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mastodon.social/users/dansup/followers"],"sensitive":false,"atomUri":"https://mastodon.social/users/dansup/statuses/100889802384218791","inReplyToAtomUri":null,"conversation":"tag:mastodon.social,2018-10-13:objectId=59103420:objectType=Conversation","content":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>","contentMap":{"en":"<p>Good Morning! <a href=\"https://mastodon.social/tags/coffee\" class=\"mention hashtag\" rel=\"tag\">#<span>coffee</span></a></p>"},"attachment":[{"type":"Document","mediaType":"image/webp","url":"https://files.mastodon.social/media_attachments/files/007/110/573/original/96a196885a77c9a4.jpg","name":null}],"tag":[{"type":"Hashtag","href":"https://mastodon.social/tags/coffee","name":"#coffee"}]}}', true, 9);
} }
public function testMastodon() public function testMastodon()
{ {
$valid = Helpers::verifyAttachments($this->mastodon); $valid = Helpers::verifyAttachments($this->mastodon);
$this->assertTrue($valid); $this->assertTrue($valid);
} }
public function testInvalidAttachmentType() public function testInvalidAttachmentType()
{ {
$valid = Helpers::verifyAttachments($this->invalidType); $valid = Helpers::verifyAttachments($this->invalidType);
$this->assertFalse($valid); $this->assertFalse($valid);
} }
public function testInvalidMimeType()
{
$valid = Helpers::verifyAttachments($this->invalidMime);
$this->assertFalse($valid);
}
public function testInvalidMimeType()
{
$valid = Helpers::verifyAttachments($this->invalidMime);
$this->assertFalse($valid);
}
} }

View file

@ -4,24 +4,24 @@ namespace Tests\Unit\ActivityPub;
use App\Util\ActivityPub\Helpers; use App\Util\ActivityPub\Helpers;
use Tests\TestCase; use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class RemoteFollowTest extends TestCase class RemoteFollowTest extends TestCase
{ {
public function setUp(): void protected string $mastodon;
{
parent::setUp();
$this->mastodon = '{"type":"Follow","signature":{"type":"RsaSignature2017","signatureValue":"Kn1/UkAQGJVaXBfWLAHcnwHg8YMAUqlEaBuYLazAG+pz5hqivsyrBmPV186Xzr+B4ZLExA9+SnOoNx/GOz4hBm0kAmukNSILAsUd84tcJ2yT9zc1RKtembK4WiwOw7li0+maeDN0HaB6t+6eTqsCWmtiZpprhXD8V1GGT8yG7X24fQ9oFGn+ng7lasbcCC0988Y1eGqNe7KryxcPuQz57YkDapvtONzk8gyLTkZMV4De93MyRHq6GVjQVIgtiYabQAxrX6Q8C+4P/jQoqdWJHEe+MY5JKyNaT/hMPt2Md1ok9fZQBGHlErk22/zy8bSN19GdG09HmIysBUHRYpBLig==","creator":"http://mastodon.example.org/users/admin#main-key","created":"2018-02-17T13:29:31Z"},"object":"http://localtesting.pleroma.lol/users/lain","nickname":"lain","id":"http://mastodon.example.org/users/admin#follows/2","actor":"http://mastodon.example.org/users/admin","@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"toot":"http://joinmastodon.org/ns#","sensitive":"as:sensitive","ostatus":"http://ostatus.org#","movedTo":"as:movedTo","manuallyApprovesFollowers":"as:manuallyApprovesFollowers","inReplyToAtomUri":"ostatus:inReplyToAtomUri","conversation":"ostatus:conversation","atomUri":"ostatus:atomUri","Hashtag":"as:Hashtag","Emoji":"toot:Emoji"}]}'; public function setUp(): void
{
parent::setUp();
} $this->mastodon = '{"type":"Follow","signature":{"type":"RsaSignature2017","signatureValue":"Kn1/UkAQGJVaXBfWLAHcnwHg8YMAUqlEaBuYLazAG+pz5hqivsyrBmPV186Xzr+B4ZLExA9+SnOoNx/GOz4hBm0kAmukNSILAsUd84tcJ2yT9zc1RKtembK4WiwOw7li0+maeDN0HaB6t+6eTqsCWmtiZpprhXD8V1GGT8yG7X24fQ9oFGn+ng7lasbcCC0988Y1eGqNe7KryxcPuQz57YkDapvtONzk8gyLTkZMV4De93MyRHq6GVjQVIgtiYabQAxrX6Q8C+4P/jQoqdWJHEe+MY5JKyNaT/hMPt2Md1ok9fZQBGHlErk22/zy8bSN19GdG09HmIysBUHRYpBLig==","creator":"http://mastodon.example.org/users/admin#main-key","created":"2018-02-17T13:29:31Z"},"object":"http://localtesting.pleroma.lol/users/lain","nickname":"lain","id":"http://mastodon.example.org/users/admin#follows/2","actor":"http://mastodon.example.org/users/admin","@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"toot":"http://joinmastodon.org/ns#","sensitive":"as:sensitive","ostatus":"http://ostatus.org#","movedTo":"as:movedTo","manuallyApprovesFollowers":"as:manuallyApprovesFollowers","inReplyToAtomUri":"ostatus:inReplyToAtomUri","conversation":"ostatus:conversation","atomUri":"ostatus:atomUri","Hashtag":"as:Hashtag","Emoji":"toot:Emoji"}]}';
/** @test */ }
public function validateMastodonFollowObject()
{ /** @test */
$mastodon = json_decode($this->mastodon, true); public function validateMastodonFollowObject()
$mastodon = Helpers::validateObject($mastodon); {
$this->assertTrue($mastodon); $mastodon = json_decode($this->mastodon, true);
} $mastodon = Helpers::validateObject($mastodon);
$this->assertTrue($mastodon);
}
} }

View file

@ -2,83 +2,82 @@
namespace Tests\Unit\ActivityPub; namespace Tests\Unit\ActivityPub;
use PHPUnit\Framework\TestCase;
use App\Util\ActivityPub\Validator\StoryValidator; use App\Util\ActivityPub\Validator\StoryValidator;
use PHPUnit\Framework\TestCase;
class StoryValidationTest extends TestCase class StoryValidationTest extends TestCase
{ {
public function setUp(): void public function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->activity = json_decode('{"@context":"https://www.w3.org/ns/activitystreams","id":"https://pixelfed.test/stories/dansup/338581222496276480","type":"Story","to":["https://pixelfed.test/users/dansup/followers"],"cc":[],"attributedTo":"https://pixelfed.test/users/dansup","published":"2021-09-01T07:20:53+00:00","expiresAt":"2021-09-02T07:21:04+00:00","duration":3,"can_reply":true,"can_react":true,"attachment":{"type":"Image","url":"https://pixelfed.test/storage/_esm.t3/xV9/R2LF1xwhAA/011oqKVPDySG3WCPW7yIs2wobvccoITMnG/yT_FZX04f2DCzTA3K8HD2OS7FptXTHPiE1c_ZkHASBQ8UlPKH4.jpg","mediaType":"image/jpeg"}}', true); $this->activity = json_decode('{"@context":"https://www.w3.org/ns/activitystreams","id":"https://pixelfed.test/stories/dansup/338581222496276480","type":"Story","to":["https://pixelfed.test/users/dansup/followers"],"cc":[],"attributedTo":"https://pixelfed.test/users/dansup","published":"2021-09-01T07:20:53+00:00","expiresAt":"2021-09-02T07:21:04+00:00","duration":3,"can_reply":true,"can_react":true,"attachment":{"type":"Image","url":"https://pixelfed.test/storage/_esm.t3/xV9/R2LF1xwhAA/011oqKVPDySG3WCPW7yIs2wobvccoITMnG/yT_FZX04f2DCzTA3K8HD2OS7FptXTHPiE1c_ZkHASBQ8UlPKH4.jpg","mediaType":"image/jpeg"}}', true);
} }
/** @test */ /** @test */
public function schemaTest() public function schemaTest()
{ {
$this->assertTrue(StoryValidator::validate($this->activity)); $this->assertTrue(StoryValidator::validate($this->activity));
} }
/** @test */ /** @test */
public function invalidContext() public function invalidContext()
{ {
$activity = $this->activity; $activity = $this->activity;
unset($activity['@context']); unset($activity['@context']);
$activity['@@context'] = 'https://www.w3.org/ns/activitystreams'; $activity['@@context'] = 'https://www.w3.org/ns/activitystreams';
$this->assertFalse(StoryValidator::validate($activity)); $this->assertFalse(StoryValidator::validate($activity));
} }
/** @test */ /** @test */
public function missingContext() public function missingContext()
{ {
$activity = $this->activity; $activity = $this->activity;
unset($activity['@context']); unset($activity['@context']);
$this->assertFalse(StoryValidator::validate($activity)); $this->assertFalse(StoryValidator::validate($activity));
} }
/** @test */ /** @test */
public function missingId() public function missingId()
{ {
$activity = $this->activity; $activity = $this->activity;
unset($activity['id']); unset($activity['id']);
$this->assertFalse(StoryValidator::validate($activity)); $this->assertFalse(StoryValidator::validate($activity));
} }
/** @test */ /** @test */
public function missingType() public function missingType()
{ {
$activity = $this->activity; $activity = $this->activity;
unset($activity['type']); unset($activity['type']);
$this->assertFalse(StoryValidator::validate($activity)); $this->assertFalse(StoryValidator::validate($activity));
} }
/** @test */ /** @test */
public function invalidType() public function invalidType()
{ {
$activity = $this->activity; $activity = $this->activity;
$activity['type'] = 'Store'; $activity['type'] = 'Store';
$this->assertFalse(StoryValidator::validate($activity)); $this->assertFalse(StoryValidator::validate($activity));
} }
/** @test */ /** @test */
public function missingTo() public function missingTo()
{ {
$activity = $this->activity; $activity = $this->activity;
unset($activity['to']); unset($activity['to']);
$this->assertFalse(StoryValidator::validate($activity)); $this->assertFalse(StoryValidator::validate($activity));
} }
/** @test */ /** @test */
public function missingTimestamps() public function missingTimestamps()
{ {
$activity = $this->activity; $activity = $this->activity;
unset($activity['published']); unset($activity['published']);
$this->assertFalse(StoryValidator::validate($activity)); $this->assertFalse(StoryValidator::validate($activity));
$activity = $this->activity;
unset($activity['expiresAt']);
$this->assertFalse(StoryValidator::validate($activity));
}
$activity = $this->activity;
unset($activity['expiresAt']);
$this->assertFalse(StoryValidator::validate($activity));
}
} }

View file

@ -2,96 +2,96 @@
namespace Tests\Unit\ActivityPub\Verb; namespace Tests\Unit\ActivityPub\Verb;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Util\ActivityPub\Validator\Accept; use App\Util\ActivityPub\Validator\Accept;
use Tests\TestCase;
class AcceptVerbTest extends TestCase class AcceptVerbTest extends TestCase
{ {
protected $validAccept; protected array $validAccept;
protected $invalidAccept; protected array $invalidAccept;
protected array $mastodonAccept;
public function setUp(): void public function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->validAccept = [
'@context' => 'https://www.w3.org/ns/activitystreams',
'id' => 'https://example.org/og/b3e4a40b-0b26-4c5a-9079-094bd633fab7',
'type' => 'Accept',
'actor' => 'https://example.org/u/alice',
'object' => [
'id' => 'https://example.net/u/bob#follows/bb27f601-ddb9-4567-8f16-023d90605ca9',
'type' => 'Follow',
'actor' => 'https://example.net/u/bob',
'object' => 'https://example.org/u/alice'
]
];
$this->invalidAccept = [
'@context' => 'https://www.w3.org/ns/activitystreams',
'id' => 'https://example.org/og/b3e4a40b-0b26-4c5a-9079-094bd633fab7',
'type' => 'Accept2',
'actor' => 'https://example.org/u/alice',
'object' => [
'id' => 'https://example.net/u/bob#follows/bb27f601-ddb9-4567-8f16-023d90605ca9',
'type' => 'Follow',
'actor' => 'https://example.net/u/bob',
'object' => 'https://example.org/u/alice'
]
];
$this->mastodonAccept = [
"@context" => [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1",
[
"toot" => "https://joinmastodon.org/ns#",
"sensitive" => "as:sensitive",
"ostatus" => "https://ostatus.org#",
"movedTo" => "as:movedTo",
"manuallyApprovesFollowers" => "as:manuallyApprovesFollowers",
"inReplyToAtomUri" => "ostatus:inReplyToAtomUri",
"conversation" => "ostatus:conversation",
"atomUri" => "ostatus:atomUri",
"Hashtag" => "as:Hashtag",
"Emoji" => "toot:Emoji",
],
],
"type" => "Accept", $this->validAccept = [
'@context' => 'https://www.w3.org/ns/activitystreams',
'id' => 'https://example.org/og/b3e4a40b-0b26-4c5a-9079-094bd633fab7',
'type' => 'Accept',
'actor' => 'https://example.org/u/alice',
'object' => [
'id' => 'https://example.net/u/bob#follows/bb27f601-ddb9-4567-8f16-023d90605ca9',
'type' => 'Follow',
'actor' => 'https://example.net/u/bob',
'object' => 'https://example.org/u/alice'
]
];
"object" => [ $this->invalidAccept = [
"type" => "Follow", '@context' => 'https://www.w3.org/ns/activitystreams',
"object" => "https://mastodon.example.org/users/admin", 'id' => 'https://example.org/og/b3e4a40b-0b26-4c5a-9079-094bd633fab7',
"id" => "https://pixelfed.dev/users/dsup#follows/4", 'type' => 'Accept2',
"actor" => "https://pixelfed.dev/users/dsup", 'actor' => 'https://example.org/u/alice',
], 'object' => [
"nickname" => "dsup", 'id' => 'https://example.net/u/bob#follows/bb27f601-ddb9-4567-8f16-023d90605ca9',
"id" => "https://mastodon.example.org/users/admin#accepts/follows/4", 'type' => 'Follow',
"actor" => "https://mastodon.example.org/users/admin", 'actor' => 'https://example.net/u/bob',
"signature" => [ 'object' => 'https://example.org/u/alice'
"type" => "RsaSignature2017", ]
"signatureValue" => "rBzK4Kqhd4g7HDS8WE5oRbWQb2R+HF/6awbUuMWhgru/xCODT0SJWSri0qWqEO4fPcpoUyz2d25cw6o+iy9wiozQb3hQNnu69AR+H5Mytc06+g10KCHexbGhbAEAw/7IzmeXELHUbaqeduaDIbdt1zw4RkwLXdqgQcGXTJ6ND1wM3WMHXQCK1m0flasIXFoBxpliPAGiElV8s0+Ltuh562GvflG3kB3WO+j+NaR0ZfG5G9N88xMj9UQlCKit5gpAE5p6syUsCU2WGBHywTumv73i3OVTIFfq+P9AdMsRuzw1r7zoKEsthW4aOzLQDi01ZjvdBz8zH6JnjDU7SMN/Ig==", ];
"creator" => "https://mastodon.example.org/users/admin#main-key",
"created" => "2018-02-17T14:36:41Z",
],
];
}
/** @test */ $this->mastodonAccept = [
public function basic_accept() '@context' => [
{ 'https://www.w3.org/ns/activitystreams',
$this->assertTrue(Accept::validate($this->validAccept)); 'https://w3id.org/security/v1',
} [
'toot' => 'https://joinmastodon.org/ns#',
'sensitive' => 'as:sensitive',
'ostatus' => 'https://ostatus.org#',
'movedTo' => 'as:movedTo',
'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri',
'conversation' => 'ostatus:conversation',
'atomUri' => 'ostatus:atomUri',
'Hashtag' => 'as:Hashtag',
'Emoji' => 'toot:Emoji',
],
],
'type' => 'Accept',
'object' => [
'type' => 'Follow',
'object' => 'https://mastodon.example.org/users/admin',
'id' => 'https://pixelfed.dev/users/dsup#follows/4',
'actor' => 'https://pixelfed.dev/users/dsup',
],
'nickname' => 'dsup',
'id' => 'https://mastodon.example.org/users/admin#accepts/follows/4',
'actor' => 'https://mastodon.example.org/users/admin',
'signature' => [
'type' => 'RsaSignature2017',
'signatureValue' => 'rBzK4Kqhd4g7HDS8WE5oRbWQb2R+HF/6awbUuMWhgru/xCODT0SJWSri0qWqEO4fPcpoUyz2d25cw6o+iy9wiozQb3hQNnu69AR+H5Mytc06+g10KCHexbGhbAEAw/7IzmeXELHUbaqeduaDIbdt1zw4RkwLXdqgQcGXTJ6ND1wM3WMHXQCK1m0flasIXFoBxpliPAGiElV8s0+Ltuh562GvflG3kB3WO+j+NaR0ZfG5G9N88xMj9UQlCKit5gpAE5p6syUsCU2WGBHywTumv73i3OVTIFfq+P9AdMsRuzw1r7zoKEsthW4aOzLQDi01ZjvdBz8zH6JnjDU7SMN/Ig==',
'creator' => 'https://mastodon.example.org/users/admin#main-key',
'created' => '2018-02-17T14:36:41Z',
],
];
}
/** @test */ /** @test */
public function invalid_accept() public function basic_accept()
{ {
$this->assertFalse(Accept::validate($this->invalidAccept)); $this->assertTrue(Accept::validate($this->validAccept));
} }
/** @test */ /** @test */
public function mastodon_accept() public function invalid_accept()
{ {
$this->assertTrue(Accept::validate($this->mastodonAccept)); $this->assertFalse(Accept::validate($this->invalidAccept));
} }
/** @test */
public function mastodon_accept()
{
$this->assertTrue(Accept::validate($this->mastodonAccept));
}
} }

View file

@ -2,211 +2,218 @@
namespace Tests\Unit\ActivityPub\Verb; namespace Tests\Unit\ActivityPub\Verb;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Util\ActivityPub\Validator\Announce; use App\Util\ActivityPub\Validator\Announce;
use Tests\TestCase;
class AnnounceTest extends TestCase class AnnounceTest extends TestCase
{ {
protected array $validAnnounce;
protected array $invalidAnnounce;
protected array $invalidDate;
protected array $contextMissing;
protected array $audienceMissing;
protected array $audienceMissing2;
protected array $invalidActor;
protected array $invalidActor2;
protected array $mastodonAnnounce;
public function setUp(): void public function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->validAnnounce = [ $this->validAnnounce = [
"@context" => "https://www.w3.org/ns/activitystreams", '@context' => 'https://www.w3.org/ns/activitystreams',
"id" => "https://example.org/users/alice/statuses/100000000000001/activity", 'id' => 'https://example.org/users/alice/statuses/100000000000001/activity',
"type" => "Announce", 'type' => 'Announce',
"actor" => "https://example.org/users/alice", 'actor' => 'https://example.org/users/alice',
"published" => "2018-12-31T23:59:59Z", 'published' => '2018-12-31T23:59:59Z',
"to" => [ 'to' => [
"https://www.w3.org/ns/activitystreams#Public" 'https://www.w3.org/ns/activitystreams#Public'
], ],
"cc" => [ 'cc' => [
"https://example.org/users/bob", 'https://example.org/users/bob',
"https://example.org/users/alice/followers" 'https://example.org/users/alice/followers'
], ],
"object" => "https://example.org/p/bob/100000000000000", 'object' => 'https://example.org/p/bob/100000000000000',
]; ];
$this->invalidAnnounce = [ $this->invalidAnnounce = [
"@context" => "https://www.w3.org/ns/activitystreams", '@context' => 'https://www.w3.org/ns/activitystreams',
"id" => "https://example.org/users/alice/statuses/100000000000001/activity", 'id' => 'https://example.org/users/alice/statuses/100000000000001/activity',
"type" => "Announce2", 'type' => 'Announce2',
"actor" => "https://example.org/users/alice", 'actor' => 'https://example.org/users/alice',
"published" => "2018-12-31T23:59:59Z", 'published' => '2018-12-31T23:59:59Z',
"to" => [ 'to' => [
"https://www.w3.org/ns/activitystreams#Public" 'https://www.w3.org/ns/activitystreams#Public'
], ],
"cc" => [ 'cc' => [
"https://example.org/users/bob", 'https://example.org/users/bob',
"https://example.org/users/alice/followers" 'https://example.org/users/alice/followers'
], ],
"object" => "https://example.org/p/bob/100000000000000", 'object' => 'https://example.org/p/bob/100000000000000',
]; ];
$this->invalidDate = [ $this->invalidDate = [
"@context" => "https://www.w3.org/ns/activitystreams", '@context' => 'https://www.w3.org/ns/activitystreams',
"id" => "https://example.org/users/alice/statuses/100000000000001/activity", 'id' => 'https://example.org/users/alice/statuses/100000000000001/activity',
"type" => "Announce", 'type' => 'Announce',
"actor" => "https://example.org/users/alice", 'actor' => 'https://example.org/users/alice',
"published" => "2018-12-31T23:59:59ZEZE", 'published' => '2018-12-31T23:59:59ZEZE',
"to" => [ 'to' => [
"https://www.w3.org/ns/activitystreams#Public" 'https://www.w3.org/ns/activitystreams#Public'
], ],
"cc" => [ 'cc' => [
"https://example.org/users/bob", 'https://example.org/users/bob',
"https://example.org/users/alice/followers" 'https://example.org/users/alice/followers'
], ],
"object" => "https://example.org/p/bob/100000000000000", 'object' => 'https://example.org/p/bob/100000000000000',
]; ];
$this->contextMissing = [ $this->contextMissing = [
"id" => "https://example.org/users/alice/statuses/100000000000001/activity", 'id' => 'https://example.org/users/alice/statuses/100000000000001/activity',
"type" => "Announce", 'type' => 'Announce',
"actor" => "https://example.org/users/alice", 'actor' => 'https://example.org/users/alice',
"published" => "2018-12-31T23:59:59Z", 'published' => '2018-12-31T23:59:59Z',
"to" => [ 'to' => [
"https://www.w3.org/ns/activitystreams#Public" 'https://www.w3.org/ns/activitystreams#Public'
], ],
"cc" => [ 'cc' => [
"https://example.org/users/bob", 'https://example.org/users/bob',
"https://example.org/users/alice/followers" 'https://example.org/users/alice/followers'
], ],
"object" => "https://example.org/p/bob/100000000000000", 'object' => 'https://example.org/p/bob/100000000000000',
]; ];
$this->audienceMissing = [ $this->audienceMissing = [
"id" => "https://example.org/users/alice/statuses/100000000000001/activity", 'id' => 'https://example.org/users/alice/statuses/100000000000001/activity',
"type" => "Announce", 'type' => 'Announce',
"actor" => "https://example.org/users/alice", 'actor' => 'https://example.org/users/alice',
"published" => "2018-12-31T23:59:59Z", 'published' => '2018-12-31T23:59:59Z',
"object" => "https://example.org/p/bob/100000000000000", 'object' => 'https://example.org/p/bob/100000000000000',
]; ];
$this->audienceMissing2 = [ $this->audienceMissing2 = [
"@context" => "https://www.w3.org/ns/activitystreams", '@context' => 'https://www.w3.org/ns/activitystreams',
"id" => "https://example.org/users/alice/statuses/100000000000001/activity", 'id' => 'https://example.org/users/alice/statuses/100000000000001/activity',
"type" => "Announce", 'type' => 'Announce',
"actor" => "https://example.org/users/alice", 'actor' => 'https://example.org/users/alice',
"published" => "2018-12-31T23:59:59Z", 'published' => '2018-12-31T23:59:59Z',
"to" => null, 'to' => null,
"cc" => null, 'cc' => null,
"object" => "https://example.org/p/bob/100000000000000", 'object' => 'https://example.org/p/bob/100000000000000',
]; ];
$this->invalidActor = [ $this->invalidActor = [
"@context" => "https://www.w3.org/ns/activitystreams", '@context' => 'https://www.w3.org/ns/activitystreams',
"id" => "https://example.org/users/alice/statuses/100000000000001/activity", 'id' => 'https://example.org/users/alice/statuses/100000000000001/activity',
"type" => "Announce", 'type' => 'Announce',
"actor" => "10000", 'actor' => '10000',
"published" => "2018-12-31T23:59:59Z", 'published' => '2018-12-31T23:59:59Z',
"to" => [ 'to' => [
"https://www.w3.org/ns/activitystreams#Public" 'https://www.w3.org/ns/activitystreams#Public'
], ],
"cc" => [ 'cc' => [
"https://example.org/users/bob", 'https://example.org/users/bob',
"https://example.org/users/alice/followers" 'https://example.org/users/alice/followers'
], ],
"object" => "https://example.org/p/bob/100000000000000", 'object' => 'https://example.org/p/bob/100000000000000',
]; ];
$this->invalidActor2 = [ $this->invalidActor2 = [
"@context" => "https://www.w3.org/ns/activitystreams", '@context' => 'https://www.w3.org/ns/activitystreams',
"id" => "https://example.org/users/alice/statuses/100000000000001/activity", 'id' => 'https://example.org/users/alice/statuses/100000000000001/activity',
"type" => "Announce", 'type' => 'Announce',
"published" => "2018-12-31T23:59:59Z", 'published' => '2018-12-31T23:59:59Z',
"to" => [ 'to' => [
"https://www.w3.org/ns/activitystreams#Public" 'https://www.w3.org/ns/activitystreams#Public'
], ],
"cc" => [ 'cc' => [
"https://example.org/users/bob", 'https://example.org/users/bob',
"https://example.org/users/alice/followers" 'https://example.org/users/alice/followers'
], ],
"object" => "https://example.org/p/bob/100000000000000", 'object' => 'https://example.org/p/bob/100000000000000',
]; ];
$this->mastodonAnnounce = [ $this->mastodonAnnounce = [
"type" => "Announce", 'type' => 'Announce',
"to" => [ 'to' => [
"https://www.w3.org/ns/activitystreams#Public", 'https://www.w3.org/ns/activitystreams#Public',
], ],
"signature" => [ 'signature' => [
"type" => "RsaSignature2017", 'type' => 'RsaSignature2017',
"signatureValue" => "T95DRE0eAligvMuRMkQA01lsoz2PKi4XXF+cyZ0BqbrO12p751TEWTyyRn5a+HH0e4kc77EUhQVXwMq80WAYDzHKVUTf2XBJPBa68vl0j6RXw3+HK4ef5hR4KWFNBU34yePS7S1fEmc1mTG4Yx926wtmZwDpEMTp1CXOeVEjCYzmdyHpepPPH2ZZettiacmPRSqBLPGWZoot7kH/SioIdnrMGY0I7b+rqkIdnnEcdhu9N1BKPEO9Sr+KmxgAUiidmNZlbBXX6gCxp8BiIdH4ABsIcwoDcGNkM5EmWunGW31LVjsEQXhH5c1Wly0ugYYPCg/0eHLNBOhKkY/teSM8Lg==", 'signatureValue' => 'T95DRE0eAligvMuRMkQA01lsoz2PKi4XXF+cyZ0BqbrO12p751TEWTyyRn5a+HH0e4kc77EUhQVXwMq80WAYDzHKVUTf2XBJPBa68vl0j6RXw3+HK4ef5hR4KWFNBU34yePS7S1fEmc1mTG4Yx926wtmZwDpEMTp1CXOeVEjCYzmdyHpepPPH2ZZettiacmPRSqBLPGWZoot7kH/SioIdnrMGY0I7b+rqkIdnnEcdhu9N1BKPEO9Sr+KmxgAUiidmNZlbBXX6gCxp8BiIdH4ABsIcwoDcGNkM5EmWunGW31LVjsEQXhH5c1Wly0ugYYPCg/0eHLNBOhKkY/teSM8Lg==',
"creator" => "https://mastodon.example.org/users/admin#main-key", 'creator' => 'https://mastodon.example.org/users/admin#main-key',
"created" => "2018-02-17T19:39:15Z", 'created' => '2018-02-17T19:39:15Z',
], ],
"published" => "2018-02-17T19:39:15Z", 'published' => '2018-02-17T19:39:15Z',
"object" => "https://mastodon.example.org/@admin/99541947525187367", 'object' => 'https://mastodon.example.org/@admin/99541947525187367',
"id" => "https://mastodon.example.org/users/admin/statuses/99542391527669785/activity", 'id' => 'https://mastodon.example.org/users/admin/statuses/99542391527669785/activity',
"cc" => [ 'cc' => [
"https://mastodon.example.org/users/admin", 'https://mastodon.example.org/users/admin',
"https://mastodon.example.org/users/admin/followers", 'https://mastodon.example.org/users/admin/followers',
], ],
"atomUri" => "https://mastodon.example.org/users/admin/statuses/99542391527669785/activity", 'atomUri' => 'https://mastodon.example.org/users/admin/statuses/99542391527669785/activity',
"actor" => "https://mastodon.example.org/users/admin", 'actor' => 'https://mastodon.example.org/users/admin',
"@context" => [ '@context' => [
"https://www.w3.org/ns/activitystreams", 'https://www.w3.org/ns/activitystreams',
"https://w3id.org/security/v1", 'https://w3id.org/security/v1',
[ [
"toot" => "https://joinmastodon.org/ns#", 'toot' => 'https://joinmastodon.org/ns#',
"sensitive" => "as:sensitive", 'sensitive' => 'as:sensitive',
"ostatus" => "https://ostatus.org#", 'ostatus' => 'https://ostatus.org#',
"movedTo" => "as:movedTo", 'movedTo' => 'as:movedTo',
"manuallyApprovesFollowers" => "as:manuallyApprovesFollowers", 'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
"inReplyToAtomUri" => "ostatus:inReplyToAtomUri", 'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri',
"conversation" => "ostatus:conversation", 'conversation' => 'ostatus:conversation',
"atomUri" => "ostatus:atomUri", 'atomUri' => 'ostatus:atomUri',
"Hashtag" => "as:Hashtag", 'Hashtag' => 'as:Hashtag',
"Emoji" => "toot:Emoji", 'Emoji' => 'toot:Emoji',
], ],
], ],
]; ];
} }
/** @test */ /** @test */
public function basic_accept() public function basic_accept()
{ {
$this->assertTrue(Announce::validate($this->validAnnounce)); $this->assertTrue(Announce::validate($this->validAnnounce));
} }
/** @test */ /** @test */
public function invalid_accept() public function invalid_accept()
{ {
$this->assertFalse(Announce::validate($this->invalidAnnounce)); $this->assertFalse(Announce::validate($this->invalidAnnounce));
} }
/** @test */ /** @test */
public function invalid_date() public function invalid_date()
{ {
$this->assertFalse(Announce::validate($this->invalidDate)); $this->assertFalse(Announce::validate($this->invalidDate));
} }
/** @test */ /** @test */
public function context_missing() public function context_missing()
{ {
$this->assertFalse(Announce::validate($this->contextMissing)); $this->assertFalse(Announce::validate($this->contextMissing));
} }
/** @test */ /** @test */
public function audience_missing() public function audience_missing()
{ {
$this->assertFalse(Announce::validate($this->audienceMissing)); $this->assertFalse(Announce::validate($this->audienceMissing));
$this->assertFalse(Announce::validate($this->audienceMissing2)); $this->assertFalse(Announce::validate($this->audienceMissing2));
} }
/** @test */ /** @test */
public function invalid_actor() public function invalid_actor()
{ {
$this->assertFalse(Announce::validate($this->invalidActor)); $this->assertFalse(Announce::validate($this->invalidActor));
$this->assertFalse(Announce::validate($this->invalidActor2)); $this->assertFalse(Announce::validate($this->invalidActor2));
} }
/** @test */ /** @test */
public function mastodon_announce() public function mastodon_announce()
{ {
$this->assertTrue(Announce::validate($this->mastodonAnnounce)); $this->assertTrue(Announce::validate($this->mastodonAnnounce));
} }
} }

View file

@ -2,52 +2,51 @@
namespace Tests\Unit\ActivityPub\Verb; namespace Tests\Unit\ActivityPub\Verb;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Util\ActivityPub\Validator\Follow; use App\Util\ActivityPub\Validator\Follow;
use Tests\TestCase;
class FollowTest extends TestCase class FollowTest extends TestCase
{ {
protected array $basicFollow;
public function setUp(): void public function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->basicFollow = [ $this->basicFollow = [
"type" => "Follow", 'type' => 'Follow',
"signature" => [ 'signature' => [
"type" => "RsaSignature2017", 'type' => 'RsaSignature2017',
"signatureValue" => "Kn1/UkAQGJVaXBfWLAHcnwHg8YMAUqlEaBuYLazAG+pz5hqivsyrBmPV186Xzr+B4ZLExA9+SnOoNx/GOz4hBm0kAmukNSILAsUd84tcJ2yT9zc1RKtembK4WiwOw7li0+maeDN0HaB6t+6eTqsCWmtiZpprhXD8V1GGT8yG7X24fQ9oFGn+ng7lasbcCC0988Y1eGqNe7KryxcPuQz57YkDapvtONzk8gyLTkZMV4De93MyRHq6GVjQVIgtiYabQAxrX6Q8C+4P/jQoqdWJHEe+MY5JKyNaT/hMPt2Md1ok9fZQBGHlErk22/zy8bSN19GdG09HmIysBUHRYpBLig==", 'signatureValue' => 'Kn1/UkAQGJVaXBfWLAHcnwHg8YMAUqlEaBuYLazAG+pz5hqivsyrBmPV186Xzr+B4ZLExA9+SnOoNx/GOz4hBm0kAmukNSILAsUd84tcJ2yT9zc1RKtembK4WiwOw7li0+maeDN0HaB6t+6eTqsCWmtiZpprhXD8V1GGT8yG7X24fQ9oFGn+ng7lasbcCC0988Y1eGqNe7KryxcPuQz57YkDapvtONzk8gyLTkZMV4De93MyRHq6GVjQVIgtiYabQAxrX6Q8C+4P/jQoqdWJHEe+MY5JKyNaT/hMPt2Md1ok9fZQBGHlErk22/zy8bSN19GdG09HmIysBUHRYpBLig==',
"creator" => "http://mastodon.example.org/users/admin#main-key", 'creator' => 'http://mastodon.example.org/users/admin#main-key',
"created" => "2018-02-17T13:29:31Z", 'created' => '2018-02-17T13:29:31Z',
], ],
"object" => "http://pixelfed.dev/users/dsup", 'object' => 'http://pixelfed.dev/users/dsup',
"nickname" => "dsup", 'nickname' => 'dsup',
"id" => "http://mastodon.example.org/users/admin#follows/2", 'id' => 'http://mastodon.example.org/users/admin#follows/2',
"actor" => "http://mastodon.example.org/users/admin", 'actor' => 'http://mastodon.example.org/users/admin',
"@context" => [ '@context' => [
"https://www.w3.org/ns/activitystreams", 'https://www.w3.org/ns/activitystreams',
"https://w3id.org/security/v1", 'https://w3id.org/security/v1',
[ [
"toot" => "http://joinmastodon.org/ns#", 'toot' => 'http://joinmastodon.org/ns#',
"sensitive" => "as:sensitive", 'sensitive' => 'as:sensitive',
"ostatus" => "http://ostatus.org#", 'ostatus' => 'http://ostatus.org#',
"movedTo" => "as:movedTo", 'movedTo' => 'as:movedTo',
"manuallyApprovesFollowers" => "as:manuallyApprovesFollowers", 'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
"inReplyToAtomUri" => "ostatus:inReplyToAtomUri", 'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri',
"conversation" => "ostatus:conversation", 'conversation' => 'ostatus:conversation',
"atomUri" => "ostatus:atomUri", 'atomUri' => 'ostatus:atomUri',
"Hashtag" => "as:Hashtag", 'Hashtag' => 'as:Hashtag',
"Emoji" => "toot:Emoji", 'Emoji' => 'toot:Emoji',
], ],
], ],
]; ];
} }
/** @test */ /** @test */
public function basic_follow() public function basic_follow()
{ {
$this->assertTrue(Follow::validate($this->basicFollow)); $this->assertTrue(Follow::validate($this->basicFollow));
} }
} }

View file

@ -2,52 +2,51 @@
namespace Tests\Unit\ActivityPub\Verb; namespace Tests\Unit\ActivityPub\Verb;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Util\ActivityPub\Validator\Like; use App\Util\ActivityPub\Validator\Like;
use Tests\TestCase;
class LikeTest extends TestCase class LikeTest extends TestCase
{ {
protected array $basicLike;
public function setUp(): void public function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->basicLike = [ $this->basicLike = [
"type" => "Like", 'type' => 'Like',
"signature" => [ 'signature' => [
"type" => "RsaSignature2017", 'type' => 'RsaSignature2017',
"signatureValue" => "fdxMfQSMwbC6wP6sh6neS/vM5879K67yQkHTbiT5Npr5wAac0y6+o3Ij+41tN3rL6wfuGTosSBTHOtta6R4GCOOhCaCSLMZKypnp1VltCzLDoyrZELnYQIC8gpUXVmIycZbREk22qWUe/w7DAFaKK4UscBlHDzeDVcA0K3Se5Sluqi9/Zh+ldAnEzj/rSEPDjrtvf5wGNf3fHxbKSRKFt90JvKK6hS+vxKUhlRFDf6/SMETw+EhwJSNW4d10yMUakqUWsFv4Acq5LW7l+HpYMvlYY1FZhNde1+uonnCyuQDyvzkff8zwtEJmAXC4RivO/VVLa17SmqheJZfI8oluVg==", 'signatureValue' => 'fdxMfQSMwbC6wP6sh6neS/vM5879K67yQkHTbiT5Npr5wAac0y6+o3Ij+41tN3rL6wfuGTosSBTHOtta6R4GCOOhCaCSLMZKypnp1VltCzLDoyrZELnYQIC8gpUXVmIycZbREk22qWUe/w7DAFaKK4UscBlHDzeDVcA0K3Se5Sluqi9/Zh+ldAnEzj/rSEPDjrtvf5wGNf3fHxbKSRKFt90JvKK6hS+vxKUhlRFDf6/SMETw+EhwJSNW4d10yMUakqUWsFv4Acq5LW7l+HpYMvlYY1FZhNde1+uonnCyuQDyvzkff8zwtEJmAXC4RivO/VVLa17SmqheJZfI8oluVg==',
"creator" => "http://mastodon.example.org/users/admin#main-key", 'creator' => 'http://mastodon.example.org/users/admin#main-key',
"created" => "2018-02-17T18:57:49Z", 'created' => '2018-02-17T18:57:49Z',
], ],
"object" => "http://pixelfed.dev/p/1", 'object' => 'http://pixelfed.dev/p/1',
"nickname" => "dsup", 'nickname' => 'dsup',
"id" => "http://mastodon.example.org/users/admin#likes/2", 'id' => 'http://mastodon.example.org/users/admin#likes/2',
"actor" => "http://mastodon.example.org/users/admin", 'actor' => 'http://mastodon.example.org/users/admin',
"@context" => [ '@context' => [
"https://www.w3.org/ns/activitystreams", 'https://www.w3.org/ns/activitystreams',
"https://w3id.org/security/v1", 'https://w3id.org/security/v1',
[ [
"toot" => "http://joinmastodon.org/ns#", 'toot' => 'http://joinmastodon.org/ns#',
"sensitive" => "as:sensitive", 'sensitive' => 'as:sensitive',
"ostatus" => "http://ostatus.org#", 'ostatus' => 'http://ostatus.org#',
"movedTo" => "as:movedTo", 'movedTo' => 'as:movedTo',
"manuallyApprovesFollowers" => "as:manuallyApprovesFollowers", 'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
"inReplyToAtomUri" => "ostatus:inReplyToAtomUri", 'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri',
"conversation" => "ostatus:conversation", 'conversation' => 'ostatus:conversation',
"atomUri" => "ostatus:atomUri", 'atomUri' => 'ostatus:atomUri',
"Hashtag" => "as:Hashtag", 'Hashtag' => 'as:Hashtag',
"Emoji" => "toot:Emoji", 'Emoji' => 'toot:Emoji',
], ],
], ],
]; ];
} }
/** @test */ /** @test */
public function basic_like() public function basic_like()
{ {
$this->assertTrue(Like::validate($this->basicLike)); $this->assertTrue(Like::validate($this->basicLike));
} }
} }

View file

@ -2,45 +2,41 @@
namespace Tests\Unit\ActivityPub\Verb; namespace Tests\Unit\ActivityPub\Verb;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Util\ActivityPub\Validator\UndoFollow; use App\Util\ActivityPub\Validator\UndoFollow;
use Tests\TestCase;
class UndoFollowTest extends TestCase class UndoFollowTest extends TestCase
{ {
protected array $validUndo;
protected array $invalidUndo;
protected $validUndo; public function setUp(): void
protected $invalidUndo; {
parent::setUp();
public function setUp(): void $this->validUndo = json_decode('{"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"toot":"http://joinmastodon.org/ns#","sensitive":"as:sensitive","ostatus":"http://ostatus.org#","movedTo":"as:movedTo","manuallyApprovesFollowers":"as:manuallyApprovesFollowers","inReplyToAtomUri":"ostatus:inReplyToAtomUri","conversation":"ostatus:conversation","atomUri":"ostatus:atomUri","Hashtag":"as:Hashtag","Emoji":"toot:Emoji"}],"signature":{"type":"RsaSignature2017","signatureValue":"Kn1/UkAQGJVaXBfWLAHcnwHg8YMAUqlEaBuYLazAG+pz5hqivsyrBmPV186Xzr+B4ZLExA9+SnOoNx/GOz4hBm0kAmukNSILAsUd84tcJ2yT9zc1RKtembK4WiwOw7li0+maeDN0HaB6t+6eTqsCWmtiZpprhXD8V1GGT8yG7X24fQ9oFGn+ng7lasbcCC0988Y1eGqNe7KryxcPuQz57YkDapvtONzk8gyLTkZMV4De93MyRHq6GVjQVIgtiYabQAxrX6Q8C+4P/jQoqdWJHEe+MY5JKyNaT/hMPt2Md1ok9fZQBGHlErk22/zy8bSN19GdG09HmIysBUHRYpBLig==","creator":"http://mastodon.example.org/users/admin#main-key","created":"2018-02-17T13:29:31Z"},"type":"Undo","object":{"type":"Follow","object":"http://localtesting.pleroma.lol/users/lain","nickname":"lain","id":"http://mastodon.example.org/users/admin#follows/2","actor":"http://mastodon.example.org/users/admin"},"actor":"http://mastodon.example.org/users/admin","id":"http://mastodon.example.org/users/admin#follow/2/undo"}', true, 8);
{
parent::setUp();
$this->validUndo = json_decode('{"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"toot":"http://joinmastodon.org/ns#","sensitive":"as:sensitive","ostatus":"http://ostatus.org#","movedTo":"as:movedTo","manuallyApprovesFollowers":"as:manuallyApprovesFollowers","inReplyToAtomUri":"ostatus:inReplyToAtomUri","conversation":"ostatus:conversation","atomUri":"ostatus:atomUri","Hashtag":"as:Hashtag","Emoji":"toot:Emoji"}],"signature":{"type":"RsaSignature2017","signatureValue":"Kn1/UkAQGJVaXBfWLAHcnwHg8YMAUqlEaBuYLazAG+pz5hqivsyrBmPV186Xzr+B4ZLExA9+SnOoNx/GOz4hBm0kAmukNSILAsUd84tcJ2yT9zc1RKtembK4WiwOw7li0+maeDN0HaB6t+6eTqsCWmtiZpprhXD8V1GGT8yG7X24fQ9oFGn+ng7lasbcCC0988Y1eGqNe7KryxcPuQz57YkDapvtONzk8gyLTkZMV4De93MyRHq6GVjQVIgtiYabQAxrX6Q8C+4P/jQoqdWJHEe+MY5JKyNaT/hMPt2Md1ok9fZQBGHlErk22/zy8bSN19GdG09HmIysBUHRYpBLig==","creator":"http://mastodon.example.org/users/admin#main-key","created":"2018-02-17T13:29:31Z"},"type":"Undo","object":{"type":"Follow","object":"http://localtesting.pleroma.lol/users/lain","nickname":"lain","id":"http://mastodon.example.org/users/admin#follows/2","actor":"http://mastodon.example.org/users/admin"},"actor":"http://mastodon.example.org/users/admin","id":"http://mastodon.example.org/users/admin#follow/2/undo"}', true, 8); $this->invalidUndo = [
'@context' => 'https://www.w3.org/ns/activitystreams',
'id' => 'https://example.org/og/b3e4a40b-0b26-4c5a-9079-094bd633fab7',
'type' => 'Undo',
'actor' => 'https://example.org/u/alice',
'object' => [
'id' => 'https://example.net/u/bob#follows/bb27f601-ddb9-4567-8f16-023d90605ca9',
'type' => 'Follow',
]
];
}
$this->invalidUndo = [ /** @test */
'@context' => 'https://www.w3.org/ns/activitystreams', public function valid_undo_follow()
'id' => 'https://example.org/og/b3e4a40b-0b26-4c5a-9079-094bd633fab7', {
'type' => 'Undo', $this->assertTrue(UndoFollow::validate($this->validUndo));
'actor' => 'https://example.org/u/alice', }
'object' => [
'id' => 'https://example.net/u/bob#follows/bb27f601-ddb9-4567-8f16-023d90605ca9',
'type' => 'Follow',
]
];
}
/** @test */
public function valid_undo_follow()
{
$this->assertTrue(UndoFollow::validate($this->validUndo));
}
/** @test */
public function invalid_undo_follow()
{
$this->assertFalse(UndoFollow::validate($this->invalidUndo));
}
/** @test */
public function invalid_undo_follow()
{
$this->assertFalse(UndoFollow::validate($this->invalidUndo));
}
} }

View file

@ -2,76 +2,76 @@
namespace Tests\Unit; namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
use App\Util\Lexer\Bearcap; use App\Util\Lexer\Bearcap;
use PHPUnit\Framework\TestCase;
class BearcapTest extends TestCase class BearcapTest extends TestCase
{ {
/** @test */ /** @test */
public function validTest() public function validTest()
{ {
$str = 'bear:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&u=https://pixelfed.test/stories/admin/337892163734081536'; $str = 'bear:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&u=https://pixelfed.test/stories/admin/337892163734081536';
$expected = [ $expected = [
"token" => "LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2", 'token' => 'LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2',
"url" => "https://pixelfed.test/stories/admin/337892163734081536", 'url' => 'https://pixelfed.test/stories/admin/337892163734081536',
]; ];
$actual = Bearcap::decode($str); $actual = Bearcap::decode($str);
$this->assertEquals($expected, $actual); $this->assertEquals($expected, $actual);
} }
/** @test */ /** @test */
public function invalidTokenParameterName() public function invalidTokenParameterName()
{ {
$str = 'bear:?token=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&u=https://pixelfed.test/stories/admin/337892163734081536'; $str = 'bear:?token=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&u=https://pixelfed.test/stories/admin/337892163734081536';
$actual = Bearcap::decode($str); $actual = Bearcap::decode($str);
$this->assertFalse($actual); $this->assertFalse($actual);
} }
/** @test */ /** @test */
public function invalidUrlParameterName() public function invalidUrlParameterName()
{ {
$str = 'bear:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&url=https://pixelfed.test/stories/admin/337892163734081536'; $str = 'bear:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&url=https://pixelfed.test/stories/admin/337892163734081536';
$actual = Bearcap::decode($str); $actual = Bearcap::decode($str);
$this->assertFalse($actual); $this->assertFalse($actual);
} }
/** @test */ /** @test */
public function invalidScheme() public function invalidScheme()
{ {
$str = 'bearcap:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&url=https://pixelfed.test/stories/admin/337892163734081536'; $str = 'bearcap:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&url=https://pixelfed.test/stories/admin/337892163734081536';
$actual = Bearcap::decode($str); $actual = Bearcap::decode($str);
$this->assertFalse($actual); $this->assertFalse($actual);
} }
/** @test */ /** @test */
public function missingToken() public function missingToken()
{ {
$str = 'bear:?u=https://pixelfed.test/stories/admin/337892163734081536'; $str = 'bear:?u=https://pixelfed.test/stories/admin/337892163734081536';
$actual = Bearcap::decode($str); $actual = Bearcap::decode($str);
$this->assertFalse($actual); $this->assertFalse($actual);
} }
/** @test */ /** @test */
public function missingUrl() public function missingUrl()
{ {
$str = 'bear:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2'; $str = 'bear:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2';
$actual = Bearcap::decode($str); $actual = Bearcap::decode($str);
$this->assertFalse($actual); $this->assertFalse($actual);
} }
/** @test */ /** @test */
public function invalidHttpUrl() public function invalidHttpUrl()
{ {
$str = 'bear:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&u=http://pixelfed.test/stories/admin/337892163734081536'; $str = 'bear:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&u=http://pixelfed.test/stories/admin/337892163734081536';
$actual = Bearcap::decode($str); $actual = Bearcap::decode($str);
$this->assertFalse($actual); $this->assertFalse($actual);
} }
/** @test */ /** @test */
public function invalidUrlSchema() public function invalidUrlSchema()
{ {
$str = 'bear:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&u=phar://pixelfed.test/stories/admin/337892163734081536'; $str = 'bear:?t=LpVypnEUdHhwwgXE9tTqEwrtPvmLjqYaPexqyXnVo1flSfJy5AYMCdRPiFRmqld2&u=phar://pixelfed.test/stories/admin/337892163734081536';
$actual = Bearcap::decode($str); $actual = Bearcap::decode($str);
$this->assertFalse($actual); $this->assertFalse($actual);
} }
} }

View file

@ -2,6 +2,7 @@
namespace Tests\Unit; namespace Tests\Unit;
use phpseclib\Crypt\RSA;
use Tests\TestCase; use Tests\TestCase;
class CryptoTest extends TestCase class CryptoTest extends TestCase
@ -18,7 +19,7 @@ class CryptoTest extends TestCase
public function testRSASigning() public function testRSASigning()
{ {
$rsa = new \phpseclib\Crypt\RSA(); $rsa = new RSA();
extract($rsa->createKey()); extract($rsa->createKey());
$rsa->loadKey($privatekey); $rsa->loadKey($privatekey);
$plaintext = 'pixelfed rsa test'; $plaintext = 'pixelfed rsa test';

View file

@ -3,31 +3,30 @@
namespace Tests\Unit; namespace Tests\Unit;
use Carbon\Carbon; use Carbon\Carbon;
use DateTime;
use Tests\TestCase; use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class DateTimeTest extends TestCase class DateTimeTest extends TestCase
{ {
/** @test */ /** @test */
public function mastodonTimestamp() public function mastodonTimestamp()
{ {
$ts = Carbon::createFromFormat(\DateTime::ISO8601, '2019-09-16T02:41:57Z'); $ts = Carbon::createFromFormat(DateTime::ISO8601, '2019-09-16T02:41:57Z');
$this->assertEquals(9, $ts->month); $this->assertEquals(9, $ts->month);
$this->assertEquals(16, $ts->day); $this->assertEquals(16, $ts->day);
$this->assertEquals(2019, $ts->year); $this->assertEquals(2019, $ts->year);
$this->assertEquals(2, $ts->hour); $this->assertEquals(2, $ts->hour);
$this->assertEquals(41, $ts->minute); $this->assertEquals(41, $ts->minute);
} }
/** @test */ /** @test */
public function p3kTimestamp() public function p3kTimestamp()
{ {
$ts = Carbon::createFromFormat(\DateTime::ISO8601, '2019-09-16T08:40:55+10:00'); $ts = Carbon::createFromFormat(DateTime::ISO8601, '2019-09-16T08:40:55+10:00');
$this->assertEquals(9, $ts->month); $this->assertEquals(9, $ts->month);
$this->assertEquals(16, $ts->day); $this->assertEquals(16, $ts->day);
$this->assertEquals(2019, $ts->year); $this->assertEquals(2019, $ts->year);
$this->assertEquals(8, $ts->hour); $this->assertEquals(8, $ts->hour);
$this->assertEquals(40, $ts->minute); $this->assertEquals(40, $ts->minute);
} }
} }

View file

@ -1,18 +0,0 @@
<?php
namespace Tests\Unit;
use Tests\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
}

View file

@ -2,20 +2,18 @@
namespace Tests\Unit\Lexer; namespace Tests\Unit\Lexer;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Util\Lexer\RestrictedNames; use App\Util\Lexer\RestrictedNames;
use Tests\TestCase;
class RestrictedNameTest extends TestCase class RestrictedNameTest extends TestCase
{ {
/** @test */ /** @test */
public function restrictedUsername() public function restrictedUsername()
{ {
$names = RestrictedNames::get(); $names = RestrictedNames::get();
$this->assertContains('p', $names); $this->assertContains('p', $names);
$this->assertContains('admin', $names); $this->assertContains('admin', $names);
$this->assertNotContains('dansup', $names); $this->assertNotContains('dansup', $names);
$this->assertNotContains('earth', $names); $this->assertNotContains('earth', $names);
} }
} }

View file

@ -2,57 +2,55 @@
namespace Tests\Unit\Lexer; namespace Tests\Unit\Lexer;
use Tests\TestCase; use App\Status;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Util\Lexer\Autolink; use App\Util\Lexer\Autolink;
use App\Util\Lexer\Extractor; use App\Util\Lexer\Extractor;
use App\Status; use Tests\TestCase;
class StatusLexerTest extends TestCase class StatusLexerTest extends TestCase
{ {
public $status; public $status;
public $entities; public $entities;
public $autolink; public $autolink;
public function setUp(): void public function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->status = "@pixelfed hi, really like the website! #píxelfed"; $this->status = '@pixelfed hi, really like the website! #píxelfed';
$this->entities = Extractor::create()->extract($this->status); $this->entities = Extractor::create()->extract($this->status);
$this->autolink = Autolink::create()->autolink($this->status); $this->autolink = Autolink::create()->autolink($this->status);
} }
public function testLexerExtractor() public function testLexerExtractor()
{ {
$expected = [ $expected = [
"hashtags" => [ 'hashtags' => [
"píxelfed", 'píxelfed',
], ],
"urls" => [], 'urls' => [],
"mentions" => [ 'mentions' => [
"pixelfed", 'pixelfed',
], ],
"replyto" => "pixelfed", 'replyto' => 'pixelfed',
"hashtags_with_indices" => [ 'hashtags_with_indices' => [
[ [
"hashtag" => "píxelfed", 'hashtag' => 'píxelfed',
"indices" => [ 'indices' => [
39, 39,
48, 48,
],
],
],
"urls_with_indices" => [],
"mentions_with_indices" => [
[
"screen_name" => "pixelfed",
"indices" => [
0,
9,
], ],
] ],
] ],
'urls_with_indices' => [],
'mentions_with_indices' => [
[
'screen_name' => 'pixelfed',
'indices' => [
0,
9,
],
]
]
]; ];
$this->assertEquals($this->entities, $expected); $this->assertEquals($this->entities, $expected);
@ -64,40 +62,40 @@ class StatusLexerTest extends TestCase
$this->assertEquals($this->autolink, $expected); $this->assertEquals($this->autolink, $expected);
} }
/** @test **/ /** @test * */
public function remoteMention() public function remoteMention()
{ {
$expected = [ $expected = [
"hashtags" => [ 'hashtags' => [
"dansup", 'dansup',
], ],
"urls" => [], 'urls' => [],
"mentions" => [ 'mentions' => [
"@dansup@mstdn.io", '@dansup@mstdn.io',
"test", 'test',
], ],
"replyto" => null, 'replyto' => null,
"hashtags_with_indices" => [ 'hashtags_with_indices' => [
[ [
"hashtag" => "dansup", 'hashtag' => 'dansup',
"indices" => [ 'indices' => [
0, 0,
7, 7,
], ],
], ],
], ],
"urls_with_indices" => [], 'urls_with_indices' => [],
"mentions_with_indices" => [ 'mentions_with_indices' => [
[ [
"screen_name" => "@dansup@mstdn.io", 'screen_name' => '@dansup@mstdn.io',
"indices" => [ 'indices' => [
8, 8,
24, 24,
], ],
], ],
[ [
"screen_name" => "test", 'screen_name' => 'test',
"indices" => [ 'indices' => [
25, 25,
30, 30,
], ],
@ -108,7 +106,7 @@ class StatusLexerTest extends TestCase
$this->assertEquals($actual, $expected); $this->assertEquals($actual, $expected);
} }
/** @test **/ /** @test * */
public function mentionLimit() public function mentionLimit()
{ {
$text = '@test1 @test @test2 @test3 @test4 @test5 test post'; $text = '@test1 @test @test2 @test3 @test4 @test5 test post';
@ -118,7 +116,7 @@ class StatusLexerTest extends TestCase
$this->assertEquals($count, Status::MAX_MENTIONS); $this->assertEquals($count, Status::MAX_MENTIONS);
} }
/** @test **/ /** @test * */
public function hashtagLimit() public function hashtagLimit()
{ {
$text = '#hashtag0 #hashtag1 #hashtag2 #hashtag3 #hashtag4 #hashtag5 #hashtag6 #hashtag7 #hashtag8 #hashtag9 #hashtag10 #hashtag11 #hashtag12 #hashtag13 #hashtag14 #hashtag15 #hashtag16 #hashtag17 #hashtag18 #hashtag19 #hashtag20 #hashtag21 #hashtag22 #hashtag23 #hashtag24 #hashtag25 #hashtag26 #hashtag27 #hashtag28 #hashtag29 #hashtag30 #hashtag31'; $text = '#hashtag0 #hashtag1 #hashtag2 #hashtag3 #hashtag4 #hashtag5 #hashtag6 #hashtag7 #hashtag8 #hashtag9 #hashtag10 #hashtag11 #hashtag12 #hashtag13 #hashtag14 #hashtag15 #hashtag16 #hashtag17 #hashtag18 #hashtag19 #hashtag20 #hashtag21 #hashtag22 #hashtag23 #hashtag24 #hashtag25 #hashtag26 #hashtag27 #hashtag28 #hashtag29 #hashtag30 #hashtag31';
@ -129,7 +127,7 @@ class StatusLexerTest extends TestCase
} }
/** @test **/ /** @test * */
public function linkLimit() public function linkLimit()
{ {
$text = 'https://example.org https://example.net https://example.com'; $text = 'https://example.org https://example.net https://example.com';

View file

@ -2,178 +2,177 @@
namespace Tests\Unit\Lexer; namespace Tests\Unit\Lexer;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use App\Util\Lexer\Autolink; use App\Util\Lexer\Autolink;
use App\Util\Lexer\Extractor; use App\Util\Lexer\Extractor;
use Tests\TestCase;
class UsernameTest extends TestCase class UsernameTest extends TestCase
{ {
/** @test **/ /** @test * */
public function genericUsername() public function genericUsername()
{ {
$username = '@dansup'; $username = '@dansup';
$entities = Extractor::create()->extract($username); $entities = Extractor::create()->extract($username);
$autolink = Autolink::create()->autolink($username); $autolink = Autolink::create()->autolink($username);
$expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup" rel="external nofollow noopener" target="_blank">@dansup</a>'; $expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup" rel="external nofollow noopener" target="_blank">@dansup</a>';
$expectedEntity = [ $expectedEntity = [
"hashtags" => [], 'hashtags' => [],
"urls" => [], 'urls' => [],
"mentions" => [ 'mentions' => [
"dansup", 'dansup',
], ],
"replyto" => "dansup", 'replyto' => 'dansup',
"hashtags_with_indices" => [], 'hashtags_with_indices' => [],
"urls_with_indices" => [], 'urls_with_indices' => [],
"mentions_with_indices" => [ 'mentions_with_indices' => [
[ [
"screen_name" => "dansup", 'screen_name' => 'dansup',
"indices" => [ 'indices' => [
0, 0,
7, 7,
], ],
], ],
], ],
]; ];
$this->assertEquals($expectedAutolink, $autolink); $this->assertEquals($expectedAutolink, $autolink);
$this->assertEquals($expectedEntity, $entities); $this->assertEquals($expectedEntity, $entities);
} }
/** @test **/ /** @test * */
public function usernameWithPeriod() public function usernameWithPeriod()
{ {
$username = '@dansup.two'; $username = '@dansup.two';
$autolink = Autolink::create()->autolink($username); $autolink = Autolink::create()->autolink($username);
$entities = Extractor::create()->extract($username); $entities = Extractor::create()->extract($username);
$expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup.two" rel="external nofollow noopener" target="_blank">@dansup.two</a>'; $expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup.two" rel="external nofollow noopener" target="_blank">@dansup.two</a>';
$expectedEntity = [ $expectedEntity = [
"hashtags" => [], 'hashtags' => [],
"urls" => [], 'urls' => [],
"mentions" => [ 'mentions' => [
"dansup.two", 'dansup.two',
], ],
"replyto" => "dansup.two", 'replyto' => 'dansup.two',
"hashtags_with_indices" => [], 'hashtags_with_indices' => [],
"urls_with_indices" => [], 'urls_with_indices' => [],
"mentions_with_indices" => [ 'mentions_with_indices' => [
[ [
"screen_name" => "dansup.two", 'screen_name' => 'dansup.two',
"indices" => [ 'indices' => [
0, 0,
11, 11,
], ],
], ],
], ],
]; ];
$this->assertEquals($expectedAutolink, $autolink); $this->assertEquals($expectedAutolink, $autolink);
$this->assertEquals($expectedEntity, $entities); $this->assertEquals($expectedEntity, $entities);
} }
/** @test **/ /** @test * */
public function usernameWithDash() public function usernameWithDash()
{ {
$username = '@dansup-too'; $username = '@dansup-too';
$autolink = Autolink::create()->autolink($username); $autolink = Autolink::create()->autolink($username);
$entities = Extractor::create()->extract($username); $entities = Extractor::create()->extract($username);
$expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup-too" rel="external nofollow noopener" target="_blank">@dansup-too</a>'; $expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup-too" rel="external nofollow noopener" target="_blank">@dansup-too</a>';
$expectedEntity = [ $expectedEntity = [
"hashtags" => [], 'hashtags' => [],
"urls" => [], 'urls' => [],
"mentions" => [ 'mentions' => [
"dansup-too", 'dansup-too',
], ],
"replyto" => "dansup-too", 'replyto' => 'dansup-too',
"hashtags_with_indices" => [], 'hashtags_with_indices' => [],
"urls_with_indices" => [], 'urls_with_indices' => [],
"mentions_with_indices" => [ 'mentions_with_indices' => [
[ [
"screen_name" => "dansup-too", 'screen_name' => 'dansup-too',
"indices" => [ 'indices' => [
0, 0,
11, 11,
], ],
], ],
], ],
]; ];
$this->assertEquals($expectedAutolink, $autolink); $this->assertEquals($expectedAutolink, $autolink);
$this->assertEquals($expectedEntity, $entities); $this->assertEquals($expectedEntity, $entities);
} }
/** @test **/ /** @test * */
public function usernameWithUnderscore() public function usernameWithUnderscore()
{ {
$username = '@dansup_too'; $username = '@dansup_too';
$autolink = Autolink::create()->autolink($username); $autolink = Autolink::create()->autolink($username);
$entities = Extractor::create()->extract($username); $entities = Extractor::create()->extract($username);
$expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup_too" rel="external nofollow noopener" target="_blank">@dansup_too</a>'; $expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup_too" rel="external nofollow noopener" target="_blank">@dansup_too</a>';
$expectedEntity = [ $expectedEntity = [
"hashtags" => [], 'hashtags' => [],
"urls" => [], 'urls' => [],
"mentions" => [ 'mentions' => [
"dansup_too", 'dansup_too',
], ],
"replyto" => "dansup_too", 'replyto' => 'dansup_too',
"hashtags_with_indices" => [], 'hashtags_with_indices' => [],
"urls_with_indices" => [], 'urls_with_indices' => [],
"mentions_with_indices" => [ 'mentions_with_indices' => [
[ [
"screen_name" => "dansup_too", 'screen_name' => 'dansup_too',
"indices" => [ 'indices' => [
0, 0,
11, 11,
], ],
], ],
], ],
]; ];
$this->assertEquals($expectedAutolink, $autolink); $this->assertEquals($expectedAutolink, $autolink);
$this->assertEquals($expectedEntity, $entities); $this->assertEquals($expectedEntity, $entities);
} }
/** @test **/ /** @test * */
public function multipleMentions() public function multipleMentions()
{ {
$text = 'hello @dansup and @pixelfed.team from @username_underscore'; $text = 'hello @dansup and @pixelfed.team from @username_underscore';
$autolink = Autolink::create()->autolink($text); $autolink = Autolink::create()->autolink($text);
$entities = Extractor::create()->extract($text); $entities = Extractor::create()->extract($text);
$expectedAutolink = 'hello <a class="u-url mention" href="https://pixelfed.dev/dansup" rel="external nofollow noopener" target="_blank">@dansup</a> and <a class="u-url mention" href="https://pixelfed.dev/pixelfed.team" rel="external nofollow noopener" target="_blank">@pixelfed.team</a> from <a class="u-url mention" href="https://pixelfed.dev/username_underscore" rel="external nofollow noopener" target="_blank">@username_underscore</a>'; $expectedAutolink = 'hello <a class="u-url mention" href="https://pixelfed.dev/dansup" rel="external nofollow noopener" target="_blank">@dansup</a> and <a class="u-url mention" href="https://pixelfed.dev/pixelfed.team" rel="external nofollow noopener" target="_blank">@pixelfed.team</a> from <a class="u-url mention" href="https://pixelfed.dev/username_underscore" rel="external nofollow noopener" target="_blank">@username_underscore</a>';
$expectedEntity = [ $expectedEntity = [
"hashtags" => [], 'hashtags' => [],
"urls" => [], 'urls' => [],
"mentions" => [ 'mentions' => [
"dansup", 'dansup',
"pixelfed.team", 'pixelfed.team',
"username_underscore", 'username_underscore',
], ],
"replyto" => null, 'replyto' => null,
"hashtags_with_indices" => [], 'hashtags_with_indices' => [],
"urls_with_indices" => [], 'urls_with_indices' => [],
"mentions_with_indices" => [ 'mentions_with_indices' => [
[ [
"screen_name" => "dansup", 'screen_name' => 'dansup',
"indices" => [ 'indices' => [
6, 6,
13, 13,
], ],
], ],
[ [
"screen_name" => "pixelfed.team", 'screen_name' => 'pixelfed.team',
"indices" => [ 'indices' => [
18, 18,
32, 32,
], ],
], ],
[ [
"screen_name" => "username_underscore", 'screen_name' => 'username_underscore',
"indices" => [ 'indices' => [
38, 38,
58, 58,
], ],
], ],
], ],
]; ];
$this->assertEquals($expectedAutolink, $autolink); $this->assertEquals($expectedAutolink, $autolink);
$this->assertEquals($expectedEntity, $entities); $this->assertEquals($expectedEntity, $entities);
} }
} }

View file

@ -4,20 +4,18 @@ namespace Tests\Unit;
use Purify; use Purify;
use Tests\TestCase; use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class PurifierTest extends TestCase class PurifierTest extends TestCase
{ {
/** @test */ /** @test */
public function puckTest() public function puckTest()
{ {
$actual = Purify::clean("<span class=\"fa-spin fa\">catgirl spinning around in the interblag</span>"); $actual = Purify::clean("<span class=\"fa-spin fa\">catgirl spinning around in the interblag</span>");
$expected = '<span>catgirl spinning around in the interblag</span>'; $expected = '<span>catgirl spinning around in the interblag</span>';
$this->assertEquals($expected, $actual); $this->assertEquals($expected, $actual);
$actual = Purify::clean("<p class=\"fa-spin fa\">catgirl spinning around in the interblag</p>"); $actual = Purify::clean("<p class=\"fa-spin fa\">catgirl spinning around in the interblag</p>");
$expected = '<p>catgirl spinning around in the interblag</p>'; $expected = '<p>catgirl spinning around in the interblag</p>';
$this->assertEquals($expected, $actual); $this->assertEquals($expected, $actual);
$actual = Purify::clean('<a class="navbar-brand d-flex align-items-center" href="https://pixelfed.social" title="Logo"><img src="/img/pixelfed-icon-color.svg" height="30px" class="px-2"><span class="font-weight-bold mb-0 d-none d-sm-block" style="font-size:20px;">pixelfed</span></a>'); $actual = Purify::clean('<a class="navbar-brand d-flex align-items-center" href="https://pixelfed.social" title="Logo"><img src="/img/pixelfed-icon-color.svg" height="30px" class="px-2"><span class="font-weight-bold mb-0 d-none d-sm-block" style="font-size:20px;">pixelfed</span></a>');

View file

@ -3,15 +3,14 @@
namespace Tests\Unit; namespace Tests\Unit;
use Tests\TestCase; use Tests\TestCase;
use App\Services\SnowflakeService;
class SnowflakeTest extends TestCase class SnowflakeTest extends TestCase
{ {
/** @test */ /** @test */
public function snowflakeTest() public function snowflakeTest()
{ {
$expected = 266077397319815168; $expected = 266077397319815168;
$actual = 266077397319815168; $actual = 266077397319815168;
$this->assertEquals($expected, $actual); $this->assertEquals($expected, $actual);
} }
} }

View file

@ -2,47 +2,47 @@
namespace Tests\Unit; namespace Tests\Unit;
use Tests\TestCase;
use App\Util\Lexer\Nickname; use App\Util\Lexer\Nickname;
use Tests\TestCase;
class WebfingerTest extends TestCase class WebfingerTest extends TestCase
{ {
/** @test */ /** @test */
public function webfingerTest() public function webfingerTest()
{ {
$expected = [ $expected = [
"domain" => "pixelfed.org", 'domain' => 'pixelfed.org',
"username" => "dansup", 'username' => 'dansup',
]; ];
$actual = Nickname::normalizeProfileUrl('acct:dansup@pixelfed.org'); $actual = Nickname::normalizeProfileUrl('acct:dansup@pixelfed.org');
$this->assertEquals($expected, $actual); $this->assertEquals($expected, $actual);
$expected = [ $expected = [
"domain" => "pixelfed.org", 'domain' => 'pixelfed.org',
"username" => "dansup_", 'username' => 'dansup_',
]; ];
$actual = Nickname::normalizeProfileUrl('acct:dansup@pixelfed.org'); $actual = Nickname::normalizeProfileUrl('acct:dansup@pixelfed.org');
$this->assertNotEquals($expected, $actual); $this->assertNotEquals($expected, $actual);
$expected = [ $expected = [
"domain" => "pixelfed.org", 'domain' => 'pixelfed.org',
"username" => "dansup", 'username' => 'dansup',
]; ];
$actual = Nickname::normalizeProfileUrl('acct:@dansup@pixelfed.org'); $actual = Nickname::normalizeProfileUrl('acct:@dansup@pixelfed.org');
$this->assertEquals($expected, $actual); $this->assertEquals($expected, $actual);
$expected = [ $expected = [
"domain" => "pixelfed.org", 'domain' => 'pixelfed.org',
"username" => "dansup", 'username' => 'dansup',
]; ];
$actual = Nickname::normalizeProfileUrl('dansup@pixelfed.org'); $actual = Nickname::normalizeProfileUrl('dansup@pixelfed.org');
$this->assertEquals($expected, $actual); $this->assertEquals($expected, $actual);
$expected = [ $expected = [
"domain" => "pixelfed.org", 'domain' => 'pixelfed.org',
"username" => "dansup", 'username' => 'dansup',
]; ];
$actual = Nickname::normalizeProfileUrl('@dansup@pixelfed.org'); $actual = Nickname::normalizeProfileUrl('@dansup@pixelfed.org');
$this->assertEquals($expected, $actual); $this->assertEquals($expected, $actual);
} }
} }