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
FAILED
movedTo
is present,
PASSED
FAILED
copiedTo
is present,
type
MUST not include "Tombstone"
FAILED
; log (“Cannot be tombstoned if copiedTo is set”)PASSED
FAILED
; log (“invalid values in copiedTo
”)PASSED
These 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 values
input
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
PASSED
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",
"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)outcome
An 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