This proposal extends and combines prior FEPs to define syntax and parsing rules for Actor objects which unambiguously express exactly one of the three following states:
This is a Test Case testing conformance with the two properties of an Actor object specified in FEP-e965.
The subject of this test is any data claiming to conform to the specification of an ActivityPub Actor Object and to the FEP-e965 extension thereof.
This test is not directly applicable to an ActivityPub Server. An ActivityPub Server serves 0 or more Actor Objects. An ActivityPub Server for a big community might serve hundreds of ActivityPub Actor Objects. An ActivityPub Server for a single human may serve only that person’s ActivityPub Actor Object.
This test applies to Actor Objects, but not all Actor Objects are addressable by an HTTPS URL. The URI that addresses an Actor Object is not the same as the Actor Object. A given URL may resolve to different Actor Objects in different contexts, and a given Actor Object may not be universally addressable across context by any one URL.
This test requires the following inputs:
actor - the actor object under tested
inapplicable.@context array should include both terms defined by FEP-7628 to signal support for this FEP
inapplicable.This test applies directly to the actor input.
actor is not a JSON object, the outcome MUST be inapplicable.actor MUST have a @context property whose value is an Array containing the string https://w3id.org/fep/7628. If it does not, the outcome MUST be inapplicable.actor is the only test targetmovedTo - MUST be a URI OR an empty string, if presentcopiedTo - MUST be a URI, if presentmovedTo and copiedTo MUST NOT both be presentactor JSON’s @context array SHOULD include "https://w3id.org/fep/7628" to signal conformanceFor the purposes of determining whether the active status and migration history of a given Actor can be tested by this test case:
@context property@context array includes the URL "https://w3id.org/fep/7628"A warning should be returned if this value is not present.
For the purposes of determining the in/active status and migration history of a the target Actor:
movedTo and copiedTo MUST NOT both be presentmovedTo can be a valid URI OR not presentcopiedTo can be a valid URI or an array containing one or more valid URIs OR not presentmovedTo and copiedTo MUST NOT both be present
FAILEDmovedTo is present,
PASSEDFAILEDcopiedTo is present,
type MUST not include "Tombstone"
FAILED; log (“Cannot be tombstoned if copiedTo is set”)PASSEDFAILED; log (“invalid values in copiedTo”)PASSEDThese are test cases for this test case, and can be used to verify that an implementation of this test case specification will be consistent with other implementations.
@context valuesinput
actor:
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox"
}
test result
inapplicable
movedTo and copiedTo presentinput
actor:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/fep/7628"
],
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"movedTo": "https://otherexample.com/newname",
"copiedTo": "https://otherexample.com/thirdname"
}
test return
FAILED, log (movedTo and copiedTo MUST NOT both be present)movedTo set to arrayinput
actor:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/fep/7628"
],
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"movedTo": [
"https://example2.com/id",
"https://example3.com/id"
],
}
test return
FAILED, log (movedTo MUST be a functional property)copiedTo contains invalid URIinput
actor:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/fep/7628"
],
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"copiedTo": [
"https://example2.com/id",
"Tombstone"
],
}
test return
FAILED, log (movedTo MUST be a functional property)movedTo set to invalid URI #1input
actor:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/fep/7628"
],
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"movedTo": "Tombstone"
}
test return
FAILED, log (movedTo MUST be a URI)movedTo set to invalid URI #2input
actor:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/fep/7628"
],
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"movedTo": ""
}
test return
FAILED, log (movedTo MUST be a URI)input
actor:{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/fep/7628"
],
"type": ["Person","Tombstone"],
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox"
}
test return
PASSEDinput
actor:{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/fep/7628"
],
"type": ["Person","Tombstone"],
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"movedTo": "https://actorname.otherexample.com"
}
test return
PASSED
This test vector does NOT conform to [FEP0-f2a] but DOES conform to the older FEP-7628. It is included to assist in testing the consumption of legacy migrated actors.
input
actor:{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/fep/7628"
],
"type": ["Person"],
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"movedTo": "https://actorname.otherexample.com"
}
test return
FAILED
input
actor:{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/fep/7628"
],
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"copiedTo": "https://personalarchive.otherexample.com"
}
test return
PASSED
copiedTo set to array)input
actor:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/fep/7628"
],
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"copiedTo": [
"https://example2.com/id",
"https://example3.com/id"
],
}
test return
PASSED, log (copiedTo contains multiple valid URIs)outcomeAn outcome is a conclusion that comes from evaluating a test on a test subject. An outcome can be one of the three following types:
inapplicable: No part of the test subject matches the applicabilitypassed: A test target meets all expectationsfailed: A test target does not meet all expectationsassertionMethod has outcome passed, requirement is satisfiedassertionMethod has outcome failed, requirement is not satisfiedassertionMethod has outcome inapplicable, further testing is needed to determine whether this requirement is satisfied