a test rule that submits an object to an outbox and checks for conformance with requirements for how the outbox server must wrap the object in a Create Activity.
Use these identifiers to refer to this Test.
urn:uuid:963a2313-788e-4bb7-b6ea-0d8bf7d255ef
This slug is memorable, but it is not guaranteed to be globally unique like a URI.
outbox-wraps-object-with-create-checked-using-get-location
This describes the input that each test run will use to select test targets.
URL of ActivityPub outbox that an object will be sent to
{
"help": "URL of ActivityPub outbox that an object will be sent to",
"required": true,
"rangeIncludes": [
"https://www.w3.org/ns/activitystreams#outbox"
]
}
{
"outbox": {
"help": "URL of ActivityPub outbox that an object will be sent to",
"required": true,
"rangeIncludes": [
"https://www.w3.org/ns/activitystreams#outbox"
]
},
"authorization": {
"help": "HTTP Authorization header value that will be sent with ActivityPub requests",
"required": false,
"type": [
"xsd:string",
"https://activitypub-testing.socialweb.coop/ns/HiddenInTestResults"
],
"rangeIncludes": [
"https://www.rfc-editor.org/rfc/rfc9110#field.authorization.value"
]
}
}
This test applies to an ActivityPub Server handling POST requests to an ActivityPub Outbox. Test Targets * outbox: same value as input.outbox
This test applies to an ActivityPub Server handling POST requests to an ActivityPub Outbox. Test Targets * outbox: same value as input.outbox
* target `outboxPostLocationResponse` http request body must be a JSON string that parses to a JSON Object called `outboxPostResult` * `outboxPostResult` must have a `type` property whose value is either the string "Create" or an Array containing the string "Create" * `outboxPostResult` must have a `object` property whose value includes the object from test target `submission` (i.e. the object that was sent to the outbox, and should have been wrapped in a Create). * `outboxPostResult` must have a `id` property whose value is a URI * `outboxPostResult.object` must have a `id` property whose value is a URI * every value linked from `submission` using the to, bto, cc, bcc, and audience properties must be included in the values for the same property in `outboxPostResult` * every value linked from `submission` using the to, bto, cc, bcc, and audience properties must be included in the values for the same property in `outboxPostResult.object`
* target `outboxPostLocationResponse` http request body must be a JSON string that parses to a JSON Object called `outboxPostResult` * `outboxPostResult` must have a `type` property whose value is either the string "Create" or an Array containing the string "Create" * `outboxPostResult` must have a `object` property whose value includes the object from test target `submission` (i.e. the object that was sent to the outbox, and should have been wrapped in a Create). * `outboxPostResult` must have a `id` property whose value is a URI * `outboxPostResult.object` must have a `id` property whose value is a URI * every value linked from `submission` using the to, bto, cc, bcc, and audience properties must be included in the values for the same property in `outboxPostResult` * every value linked from `submission` using the to, bto, cc, bcc, and audience properties must be included in the values for the same property in `outboxPostResult.object`
urn:uuid:dde952d7-b9b0-488f-8b06-61a10ba134d4
https://example.com/
inapplicable
This Test has been derived from these specified requirements.
{
"source": "https://www.w3.org/TR/activitypub/",
"section": {
"id": "https://www.w3.org/TR/activitypub/#object-without-create",
"name": "Object creation without a Create Activity",
"branch": [
6,
2,
1
]
},
"selector": {
"type": "TextQuoteSelector",
"prefix": "The server MUST accept a valid [ActivityStreams] object that isn't a subtype of Activity in the POST request to the outbox.\n",
"exact": "The server then MUST attach this object as the object of a Create Activity.\n",
"suffix": "For non-transient objects, the server MUST attach an id to both the wrapping Create and its wrapped Object.\n"
}
}
{
"id": "urn:uuid:e6d00349-6d07-4512-9a99-f698d3bc1dba",
"uuid": "e6d00349-6d07-4512-9a99-f698d3bc1dba",
"type": "Behavior",
"content": "The server then MUST attach this object as the object of a Create Activity.\n",
"tag": [
{
"name": "ActivityPubServer",
"id": "https://socialweb.coop/tag/ActivityPubServer"
}
],
"context": [
"https://www.w3.org/TR/activitypub/",
{
"name": "6.2 Create Activity",
"id": "https://www.w3.org/TR/activitypub/#create-activity-outbox"
},
{
"name": "6.2.1 Object creation without a Create Activity",
"id": "https://www.w3.org/TR/activitypub/#object-without-create"
}
],
"origin": {
"source": "https://www.w3.org/TR/activitypub/",
"section": {
"id": "https://www.w3.org/TR/activitypub/#object-without-create",
"name": "Object creation without a Create Activity",
"branch": [
6,
2,
1
]
},
"selector": {
"type": "TextQuoteSelector",
"prefix": "The server MUST accept a valid [ActivityStreams] object that isn't a subtype of Activity in the POST request to the outbox.\n",
"exact": "The server then MUST attach this object as the object of a Create Activity.\n",
"suffix": "For non-transient objects, the server MUST attach an id to both the wrapping Create and its wrapped Object.\n"
}
},
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://socialweb.coop/ns/testing/context.json"
]
}
{
"source": "https://www.w3.org/TR/activitypub/",
"section": {
"id": "https://www.w3.org/TR/activitypub/#object-without-create",
"name": "Object creation without a Create Activity",
"branch": [
6,
2,
1
]
},
"selector": {
"type": "TextQuoteSelector",
"prefix": "The server then MUST attach this object as the object of a Create Activity.\n",
"exact": "For non-transient objects, the server MUST attach an id to both the wrapping Create and its wrapped Object.\n",
"suffix": "Note\n"
}
}
{
"id": "urn:uuid:104e2cde-f072-43af-badd-bf9bd4129151",
"uuid": "104e2cde-f072-43af-badd-bf9bd4129151",
"type": "Behavior",
"content": "For non-transient objects, the server MUST attach an id to both the wrapping Create and its wrapped Object.\n",
"tag": [
{
"name": "ActivityPubServer",
"id": "https://socialweb.coop/tag/ActivityPubServer"
}
],
"context": [
"https://www.w3.org/TR/activitypub/",
{
"name": "6.2 Create Activity",
"id": "https://www.w3.org/TR/activitypub/#create-activity-outbox"
},
{
"name": "6.2.1 Object creation without a Create Activity",
"id": "https://www.w3.org/TR/activitypub/#object-without-create"
}
],
"origin": {
"source": "https://www.w3.org/TR/activitypub/",
"section": {
"id": "https://www.w3.org/TR/activitypub/#object-without-create",
"name": "Object creation without a Create Activity",
"branch": [
6,
2,
1
]
},
"selector": {
"type": "TextQuoteSelector",
"prefix": "The server then MUST attach this object as the object of a Create Activity.\n",
"exact": "For non-transient objects, the server MUST attach an id to both the wrapping Create and its wrapped Object.\n",
"suffix": "Note\n"
}
},
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://socialweb.coop/ns/testing/context.json"
]
}
{
"source": "https://www.w3.org/TR/activitypub/",
"section": {
"id": "https://www.w3.org/TR/activitypub/#object-without-create",
"name": "Object creation without a Create Activity",
"branch": [
6,
2,
1
]
},
"selector": {
"type": "TextQuoteSelector",
"prefix": "The Location value returned by the server should be the URL of the new Create activity (rather than the object). \n",
"exact": "Any to, bto, cc, bcc, and audience properties specified on the object MUST be copied over to the new Create activity by the server.\n",
"suffix": "Example 15: Object with audience targeting\n"
}
}
{
"id": "urn:uuid:f3725db1-1e6b-4d20-9cea-a49ef4291e9f",
"uuid": "f3725db1-1e6b-4d20-9cea-a49ef4291e9f",
"type": "Behavior",
"content": "Any to, bto, cc, bcc, and audience properties specified on the object MUST be copied over to the new Create activity by the server.\n",
"context": [
"https://www.w3.org/TR/activitypub/",
{
"name": "6.2 Create Activity",
"id": "https://www.w3.org/TR/activitypub/#create-activity-outbox"
},
{
"name": "6.2.1 Object creation without a Create Activity",
"id": "https://www.w3.org/TR/activitypub/#object-without-create"
}
],
"tag": [
{
"name": "ActivityPubServer",
"id": "https://socialweb.coop/tag/ActivityPubServer"
}
],
"origin": {
"source": "https://www.w3.org/TR/activitypub/",
"section": {
"id": "https://www.w3.org/TR/activitypub/#object-without-create",
"name": "Object creation without a Create Activity",
"branch": [
6,
2,
1
]
},
"selector": {
"type": "TextQuoteSelector",
"prefix": "The Location value returned by the server should be the URL of the new Create activity (rather than the object). \n",
"exact": "Any to, bto, cc, bcc, and audience properties specified on the object MUST be copied over to the new Create activity by the server.\n",
"suffix": "Example 15: Object with audience targeting\n"
}
},
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://socialweb.coop/ns/testing/context.json"
]
}
This test is part of the following Test Suites:
{
"name": "Outbox Wraps Object With Create Activity",
"description": "a test rule that submits an object to an outbox and checks for conformance with requirements for how the outbox server must wrap the object in a Create Activity.",
"slug": "outbox-wraps-object-with-create-checked-using-get-location",
"input": {
"outbox": {
"help": "URL of ActivityPub outbox that an object will be sent to",
"required": true,
"rangeIncludes": [
"https://www.w3.org/ns/activitystreams#outbox"
]
},
"authorization": {
"help": "HTTP Authorization header value that will be sent with ActivityPub requests",
"required": false,
"type": [
"xsd:string",
"https://activitypub-testing.socialweb.coop/ns/HiddenInTestResults"
],
"rangeIncludes": [
"https://www.rfc-editor.org/rfc/rfc9110#field.authorization.value"
]
}
},
"applicability": "\nThis test applies to an ActivityPub Server handling POST requests to an ActivityPub Outbox.\n\nTest Targets\n* outbox: same value as input.outbox\n",
"inapplicableCases": [],
"passedCases": [],
"failedCases": [],
"uuid": "963a2313-788e-4bb7-b6ea-0d8bf7d255ef",
"isPartOf": [
"https://socialweb.coop/activitypub/test-cases/"
],
"requirementReference": [
{
"id": "urn:uuid:e6d00349-6d07-4512-9a99-f698d3bc1dba",
"url": "https://activitypub-testing.socialweb.coop/e6d00349-6d07-4512-9a99-f698d3bc1dba"
},
{
"id": "urn:uuid:104e2cde-f072-43af-badd-bf9bd4129151",
"url": "https://activitypub-testing.socialweb.coop/104e2cde-f072-43af-badd-bf9bd4129151"
},
{
"id": "urn:uuid:f3725db1-1e6b-4d20-9cea-a49ef4291e9f",
"url": "https://activitypub-testing.socialweb.coop/f3725db1-1e6b-4d20-9cea-a49ef4291e9f"
}
],
"testCases": [
{
"name": "outbox=https://socialweb.coop/outbox",
"id": "urn:uuid:d7c8b377-2850-481b-992f-92ac437a9f3c",
"input": {
"outbox": "https://socialweb.coop/outbox"
},
"result": {
"outcome": "passed"
}
},
{
"name": "outbox=https://example.com",
"id": "urn:uuid:dde952d7-b9b0-488f-8b06-61a10ba134d4",
"input": {
"outbox": "https://example.com/"
},
"result": {
"outcome": "inapplicable"
}
}
],
"expectations": "\n* target `outboxPostLocationResponse` http request body must be a JSON string that parses to a JSON Object called `outboxPostResult`\n* `outboxPostResult` must have a `type` property whose value is either the string \"Create\" or an Array containing the string \"Create\"\n* `outboxPostResult` must have a `object` property whose value includes the object from test target `submission` (i.e. the object that was sent to the outbox, and should have been wrapped in a Create).\n* `outboxPostResult` must have a `id` property whose value is a URI\n* `outboxPostResult.object` must have a `id` property whose value is a URI\n* every value linked from `submission` using the to, bto, cc, bcc, and audience properties must be included in the values for the same property in `outboxPostResult`\n* every value linked from `submission` using the to, bto, cc, bcc, and audience properties must be included in the values for the same property in `outboxPostResult.object`\n"
}