mirror of
https://framagit.org/hubzilla/core.git
synced 2026-06-21 09:01:15 -04:00
This is just a basic test that parses a specific object, and tests that all the referenced objects are fetched from the originating servers.
137 lines
4.2 KiB
PHP
137 lines
4.2 KiB
PHP
<?php
|
|
/**
|
|
* Unit tests for Zotlabs\Lib\ActivityStreams.
|
|
*
|
|
* SPDX-FileCopyrightText: 2024 Hubzilla Community
|
|
* SPDX-FileContributor: Harald Eilertsen
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
namespace Zotlabs\Tests\Unit\Lib;
|
|
|
|
use phpmock\phpunit\PHPMock;
|
|
use Zotlabs\Lib\ActivityStreams;
|
|
use Zotlabs\Tests\Unit\UnitTestCase;
|
|
|
|
class ActivityStreamsTest extends UnitTestCase {
|
|
|
|
// Import PHPMock methods into this class
|
|
use PHPMock;
|
|
|
|
/**
|
|
* Test parsing an announce activity of a like from a remote server of
|
|
* a note from a third server.
|
|
*
|
|
* Also test that we fetch the referenced objects when the received
|
|
* activity is parsed,
|
|
*/
|
|
public function test_parse_announce_of_like(): void {
|
|
$payload = <<<JSON
|
|
{
|
|
"actor": "https://lemmy.test/c/technology",
|
|
"to": [
|
|
"https://www.w3.org/ns/activitystreams#Public"
|
|
],
|
|
"object": {
|
|
"id": "https://lemmy.test/activities/like/e6e38c8b-beee-406f-9523-9da7ec97a823",
|
|
"actor": "https://lemmy.test/u/SomePerson",
|
|
"object": "https://somesite.test/post/1197552",
|
|
"type": "Like",
|
|
"audience": "https://lemmy.test/c/technology"
|
|
},
|
|
"cc": [
|
|
"https://lemmy.test/c/technology/followers"
|
|
],
|
|
"type": "Announce",
|
|
"id": "https://lemmy.test/activities/announce/like/9e583a54-e4e0-4436-9726-975a14f923ed"
|
|
}
|
|
JSON;
|
|
|
|
//
|
|
// Mock z_fetch_url to prevent us from spamming real servers during test runs
|
|
//
|
|
// We just create some sample ActivityStreams objects to return for the various
|
|
// URL's to make it a somewhat realistic test. Each object will have it's URL as
|
|
// it's id and only specify the object type as laid out in the $urlmap below.
|
|
|
|
$urlmap = [
|
|
'https://lemmy.test/c/technology' => [ 'type' => 'Group' ],
|
|
'https://lemmy.test/u/SomePerson' => [ 'type' => 'Person' ],
|
|
'https://somesite.test/post/1197552' => [ 'type' => 'Note' ],
|
|
];
|
|
|
|
$z_fetch_url_stub = $this->getFunctionMock('Zotlabs\Lib', 'z_fetch_url');
|
|
$z_fetch_url_stub
|
|
->expects($this->any())
|
|
->willReturnCallback(function ($url) use ($urlmap) {
|
|
if (isset($urlmap[$url])) {
|
|
$body = json_encode(
|
|
array_merge([ 'id' => $url ], $urlmap[$url]),
|
|
JSON_FORCE_OBJECT,
|
|
);
|
|
|
|
return [
|
|
'success' => true,
|
|
'body' => $body,
|
|
];
|
|
} else {
|
|
// We should perhaps throw an error here to fail the test,
|
|
// as we're receiving an unexpected URL.
|
|
return [
|
|
'success' => false,
|
|
];
|
|
}
|
|
});
|
|
|
|
// Make sure we have a sys channel before we start
|
|
create_sys_channel();
|
|
|
|
$as = new ActivityStreams($payload);
|
|
|
|
$this->assertTrue($as->valid);
|
|
|
|
$this->assertEquals(
|
|
'https://lemmy.test/activities/announce/like/9e583a54-e4e0-4436-9726-975a14f923ed',
|
|
$as->id
|
|
);
|
|
|
|
$this->assertEquals('Announce', $as->type);
|
|
|
|
$this->assertIsArray($as->actor);
|
|
$this->assertArrayHasKey('id', $as->actor);
|
|
$this->assertEquals('https://lemmy.test/c/technology', $as->actor['id']);
|
|
$this->assertArrayHasKey('type', $as->actor);
|
|
$this->assertEquals('Group', $as->actor['type']);
|
|
|
|
$this->assertIsArray($as->recips);
|
|
$this->assertContains('https://www.w3.org/ns/activitystreams#Public', $as->recips);
|
|
$this->assertContains('https://lemmy.test/c/technology/followers', $as->recips);
|
|
$this->assertContains('https://lemmy.test/c/technology', $as->recips);
|
|
|
|
$this->assertIsArray($as->obj);
|
|
$this->assertArrayHasKey('id', $as->obj);
|
|
$this->assertEquals(
|
|
'https://lemmy.test/activities/like/e6e38c8b-beee-406f-9523-9da7ec97a823',
|
|
$as->obj['id']
|
|
);
|
|
$this->assertArrayHasKey('type', $as->obj);
|
|
$this->assertEquals('Like', $as->obj['type']);
|
|
$this->assertArrayHasKey('object', $as->obj);
|
|
|
|
$this->assertIsArray($as->obj['object']);
|
|
|
|
$this->assertArrayHasKey('id', $as->obj['object']);
|
|
$this->assertEquals('https://somesite.test/post/1197552', $as->obj['object']['id']);
|
|
|
|
$this->assertArrayHasKey('type', $as->obj['object']);
|
|
$this->assertEquals('Note', $as->obj['object']['type']);
|
|
|
|
$this->assertIsArray($as->obj['actor']);
|
|
$this->assertArrayHasKey('id', $as->obj['actor']);
|
|
$this->assertEquals('https://lemmy.test/u/SomePerson', $as->obj['actor']['id']);
|
|
$this->assertArrayHasKey('type', $as->obj['actor']);
|
|
$this->assertEquals('Person', $as->obj['actor']['type']);
|
|
}
|
|
}
|