activitypub-testing Implementation Guide

The goal of this document is to guide for ActivityPub testers on how to use the activitypub-testing tool to test an ActivityPub Conformant Server

Prerequisites

Optional:

Be aware:

Installing activitypub-testing

⚡ npm install -g activitypub-testing

If the previous command succeeds, then the following should work in your command prompt:

⚡ activitypub-testing help

If installation succeeded, this command will show documentation for how to use activitypub-testing.

Testing an ActivityPub Conformant Server

Testing an ActivityPub Actor

  1. Choose an ActivityPub Actor served by an ActivityPub Conformant Server that will be a test subject. Let actor be the id of this Actor.

    • if you are developing an ActivityPub Server locally, the Actor ID could look like http://localhost:8000/actors/alyssa-p-hacker

    • For the rest of this guide, we'll use

      ⚡ actor="https://socialweb.coop/"
      
  2. To test the actor, invoke the test actor command and pass actor as the argument.

    ⚡ activitypub-testing test actor "$actor"
    

    This will run many tests against actor and stream the results as JSON objects to stdout. It won't record any results, which can be useful for exploratory testing.

  3. When you are ready to record some test results, run the same command, but redirect stdout to append the results to a file results.ndjson using tee

    ⚡ activitypub-testing test actor "$actor" | tee results.ndjson
    
  4. Analyze the results

    ⚡ cat results.ndjson | jq .
    
    • See Appendix A: Example results.ndjson for example output

    • Every object in results is an Assertion with a result with an outcome.

    • You can use jq to show only the result of each test:

      ⚡ cat results.ndjson | jq '{ result, test: .test | { url } }'
      {
        "result": {
          "outcome": "passed"
        },
        "test": {
          "url": "https://socialweb.coop/activitypub/test-cases/following-collection-must-be-a-collection"
        }
      }
      # more JSONs omitted for brevity 
      
    • Or only show results with outcomes other than passed:

      ⚡ cat results.ndjson | jq 'select(.result.outcome != "passed")'
      

      No output means every test passed.

In future releases of activitypub-testing, there will be commands to test other parts of an ActivityPub Server. If you'd like to shape the roadmap, please file an issue

File an Issue

If you're having an issue using activitypub-testing, you can report the issue by making a Pull Request into the /issues folder of the activitypub-testing repository at https://codeberg.org/socialweb.coop/activitypub-testing/issues.

Click here to start creating a new issue using the codeberg.org website.

Appendix A: Example results.ndjson

{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "following-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/following-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `following`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `following` Collection Must be a Collection",
    "uuid": "018c3e17-a1bd-7040-8007-4cd3b9063288"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "followers-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/followers-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `followers`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `followers` Collection Must be a Collection",
    "uuid": "018c3e08-611f-7e56-9f45-2fe5e4877d4e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "liked-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/liked-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a liked collection with an appropriate Collection type",
    "name": "An ActivityPub Object `liked` Collection Must be a Collection",
    "uuid": "018c3df2-d6d8-7f62-805b-b71a96cc6170"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "likes-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/likes-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a likes collection with an appropriate Collection type",
    "name": "An ActivityPub Object `likes` Collection Must be a Collection",
    "uuid": "200b9bc8-aae3-46f2-a6ab-5366042c0f6e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "shares-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/shares-collection-must-be-a-collection",
    "description": "This test case tests that an actor's shares collection is an expected kind of collection",
    "name": "shares collection MUST be either an OrderedCollection or a Collection",
    "uuid": "b03a5245-1072-426d-91b3-a3d412d45ae8"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "inputs": {
      "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
    },
    "outcome": "passed",
    "source": []
  },
  "test": {
    "slug": "actor-objects-must-have-inbox-outbox-properties",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-objects-must-have-inbox-outbox-properties",
    "description": "This rule checks whether a given Actor Object has the properties inbox and outbox.",
    "name": "Actor Objects Must Have Properties `inbox` and `outbox`",
    "uuid": "acaacb5f-8f7e-4f28-8d81-c7955070a767"
  },
  "input": {
    "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "actor-must-serve-as2-object-to-get",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-must-serve-as2-object-to-get",
    "description": "This rule checks that URLs of ActivityPub objects can be resolved to a representation with well-known media type for further processing.",
    "name": "ActivityPub Servers Must Serve Objects in Response to an HTTP GET Request Accepting ActivityStreams 2.0 Media Type",
    "uuid": "e7ee491d-88d7-4e67-80c8-f74781bb247c"
  },
  "input": {
    "id": "https://socialweb.coop/",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the outbox property of an object appears to be an OrderedCollection",
    "name": "outbox must be an OrderedCollection",
    "uuid": "4af549f4-3797-4d99-a151-67c3d8feaa46"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "inbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/inbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the inbox property of an object appears to be an OrderedCollection",
    "name": "inbox must be an OrderedCollection",
    "uuid": "5e94d155-ed4a-4d71-b797-d7c387736ecf"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-post-servers-must-return-a-201-created-http-code",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-post-servers-must-return-a-201-created-http-code",
    "description": "This test checks that an ActivityPub Outbox responds with a 201 status code when sent a POST request with an Activity submission.",
    "name": "Outbox Servers handling activity submissions MUST return a 201 created HTTP status code",
    "uuid": "723afcbb-118d-433e-8ab4-560ffca93582"
  },
  "input": {
    "outbox": "https://socialweb.coop/outbox",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "following-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/following-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `following`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `following` Collection Must be a Collection",
    "uuid": "018c3e17-a1bd-7040-8007-4cd3b9063288"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "following-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/following-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `following`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `following` Collection Must be a Collection",
    "uuid": "018c3e17-a1bd-7040-8007-4cd3b9063288"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "followers-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/followers-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `followers`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `followers` Collection Must be a Collection",
    "uuid": "018c3e08-611f-7e56-9f45-2fe5e4877d4e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "followers-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/followers-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `followers`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `followers` Collection Must be a Collection",
    "uuid": "018c3e08-611f-7e56-9f45-2fe5e4877d4e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "liked-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/liked-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a liked collection with an appropriate Collection type",
    "name": "An ActivityPub Object `liked` Collection Must be a Collection",
    "uuid": "018c3df2-d6d8-7f62-805b-b71a96cc6170"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "liked-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/liked-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a liked collection with an appropriate Collection type",
    "name": "An ActivityPub Object `liked` Collection Must be a Collection",
    "uuid": "018c3df2-d6d8-7f62-805b-b71a96cc6170"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "likes-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/likes-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a likes collection with an appropriate Collection type",
    "name": "An ActivityPub Object `likes` Collection Must be a Collection",
    "uuid": "200b9bc8-aae3-46f2-a6ab-5366042c0f6e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "likes-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/likes-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a likes collection with an appropriate Collection type",
    "name": "An ActivityPub Object `likes` Collection Must be a Collection",
    "uuid": "200b9bc8-aae3-46f2-a6ab-5366042c0f6e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "shares-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/shares-collection-must-be-a-collection",
    "description": "This test case tests that an actor's shares collection is an expected kind of collection",
    "name": "shares collection MUST be either an OrderedCollection or a Collection",
    "uuid": "b03a5245-1072-426d-91b3-a3d412d45ae8"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "shares-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/shares-collection-must-be-a-collection",
    "description": "This test case tests that an actor's shares collection is an expected kind of collection",
    "name": "shares collection MUST be either an OrderedCollection or a Collection",
    "uuid": "b03a5245-1072-426d-91b3-a3d412d45ae8"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "inputs": {
      "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
    },
    "outcome": "passed",
    "source": []
  },
  "test": {
    "slug": "actor-objects-must-have-inbox-outbox-properties",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-objects-must-have-inbox-outbox-properties",
    "description": "This rule checks whether a given Actor Object has the properties inbox and outbox.",
    "name": "Actor Objects Must Have Properties `inbox` and `outbox`",
    "uuid": "acaacb5f-8f7e-4f28-8d81-c7955070a767"
  },
  "input": {
    "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "inputs": {
      "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
    },
    "outcome": "passed",
    "source": []
  },
  "test": {
    "slug": "actor-objects-must-have-inbox-outbox-properties",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-objects-must-have-inbox-outbox-properties",
    "description": "This rule checks whether a given Actor Object has the properties inbox and outbox.",
    "name": "Actor Objects Must Have Properties `inbox` and `outbox`",
    "uuid": "acaacb5f-8f7e-4f28-8d81-c7955070a767"
  },
  "input": {
    "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "actor-must-serve-as2-object-to-get",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-must-serve-as2-object-to-get",
    "description": "This rule checks that URLs of ActivityPub objects can be resolved to a representation with well-known media type for further processing.",
    "name": "ActivityPub Servers Must Serve Objects in Response to an HTTP GET Request Accepting ActivityStreams 2.0 Media Type",
    "uuid": "e7ee491d-88d7-4e67-80c8-f74781bb247c"
  },
  "input": {
    "id": "https://socialweb.coop/",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "actor-must-serve-as2-object-to-get",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-must-serve-as2-object-to-get",
    "description": "This rule checks that URLs of ActivityPub objects can be resolved to a representation with well-known media type for further processing.",
    "name": "ActivityPub Servers Must Serve Objects in Response to an HTTP GET Request Accepting ActivityStreams 2.0 Media Type",
    "uuid": "e7ee491d-88d7-4e67-80c8-f74781bb247c"
  },
  "input": {
    "id": "https://socialweb.coop/",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "inbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/inbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the inbox property of an object appears to be an OrderedCollection",
    "name": "inbox must be an OrderedCollection",
    "uuid": "5e94d155-ed4a-4d71-b797-d7c387736ecf"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "inbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/inbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the inbox property of an object appears to be an OrderedCollection",
    "name": "inbox must be an OrderedCollection",
    "uuid": "5e94d155-ed4a-4d71-b797-d7c387736ecf"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the outbox property of an object appears to be an OrderedCollection",
    "name": "outbox must be an OrderedCollection",
    "uuid": "4af549f4-3797-4d99-a151-67c3d8feaa46"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the outbox property of an object appears to be an OrderedCollection",
    "name": "outbox must be an OrderedCollection",
    "uuid": "4af549f4-3797-4d99-a151-67c3d8feaa46"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-post-servers-must-return-a-201-created-http-code",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-post-servers-must-return-a-201-created-http-code",
    "description": "This test checks that an ActivityPub Outbox responds with a 201 status code when sent a POST request with an Activity submission.",
    "name": "Outbox Servers handling activity submissions MUST return a 201 created HTTP status code",
    "uuid": "723afcbb-118d-433e-8ab4-560ffca93582"
  },
  "input": {
    "outbox": "https://socialweb.coop/outbox",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-post-servers-must-return-a-201-created-http-code",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-post-servers-must-return-a-201-created-http-code",
    "description": "This test checks that an ActivityPub Outbox responds with a 201 status code when sent a POST request with an Activity submission.",
    "name": "Outbox Servers handling activity submissions MUST return a 201 created HTTP status code",
    "uuid": "723afcbb-118d-433e-8ab4-560ffca93582"
  },
  "input": {
    "outbox": "https://socialweb.coop/outbox",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "following-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/following-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `following`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `following` Collection Must be a Collection",
    "uuid": "018c3e17-a1bd-7040-8007-4cd3b9063288"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "followers-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/followers-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `followers`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `followers` Collection Must be a Collection",
    "uuid": "018c3e08-611f-7e56-9f45-2fe5e4877d4e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "liked-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/liked-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a liked collection with an appropriate Collection type",
    "name": "An ActivityPub Object `liked` Collection Must be a Collection",
    "uuid": "018c3df2-d6d8-7f62-805b-b71a96cc6170"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "likes-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/likes-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a likes collection with an appropriate Collection type",
    "name": "An ActivityPub Object `likes` Collection Must be a Collection",
    "uuid": "200b9bc8-aae3-46f2-a6ab-5366042c0f6e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "shares-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/shares-collection-must-be-a-collection",
    "description": "This test case tests that an actor's shares collection is an expected kind of collection",
    "name": "shares collection MUST be either an OrderedCollection or a Collection",
    "uuid": "b03a5245-1072-426d-91b3-a3d412d45ae8"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "inputs": {
      "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
    },
    "outcome": "passed",
    "source": []
  },
  "test": {
    "slug": "actor-objects-must-have-inbox-outbox-properties",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-objects-must-have-inbox-outbox-properties",
    "description": "This rule checks whether a given Actor Object has the properties inbox and outbox.",
    "name": "Actor Objects Must Have Properties `inbox` and `outbox`",
    "uuid": "acaacb5f-8f7e-4f28-8d81-c7955070a767"
  },
  "input": {
    "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "actor-must-serve-as2-object-to-get",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-must-serve-as2-object-to-get",
    "description": "This rule checks that URLs of ActivityPub objects can be resolved to a representation with well-known media type for further processing.",
    "name": "ActivityPub Servers Must Serve Objects in Response to an HTTP GET Request Accepting ActivityStreams 2.0 Media Type",
    "uuid": "e7ee491d-88d7-4e67-80c8-f74781bb247c"
  },
  "input": {
    "id": "https://socialweb.coop/",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "inbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/inbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the inbox property of an object appears to be an OrderedCollection",
    "name": "inbox must be an OrderedCollection",
    "uuid": "5e94d155-ed4a-4d71-b797-d7c387736ecf"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the outbox property of an object appears to be an OrderedCollection",
    "name": "outbox must be an OrderedCollection",
    "uuid": "4af549f4-3797-4d99-a151-67c3d8feaa46"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-post-servers-must-return-a-201-created-http-code",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-post-servers-must-return-a-201-created-http-code",
    "description": "This test checks that an ActivityPub Outbox responds with a 201 status code when sent a POST request with an Activity submission.",
    "name": "Outbox Servers handling activity submissions MUST return a 201 created HTTP status code",
    "uuid": "723afcbb-118d-433e-8ab4-560ffca93582"
  },
  "input": {
    "outbox": "https://socialweb.coop/outbox",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "following-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/following-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `following`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `following` Collection Must be a Collection",
    "uuid": "018c3e17-a1bd-7040-8007-4cd3b9063288"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "followers-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/followers-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `followers`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `followers` Collection Must be a Collection",
    "uuid": "018c3e08-611f-7e56-9f45-2fe5e4877d4e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "liked-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/liked-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a liked collection with an appropriate Collection type",
    "name": "An ActivityPub Object `liked` Collection Must be a Collection",
    "uuid": "018c3df2-d6d8-7f62-805b-b71a96cc6170"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "likes-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/likes-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a likes collection with an appropriate Collection type",
    "name": "An ActivityPub Object `likes` Collection Must be a Collection",
    "uuid": "200b9bc8-aae3-46f2-a6ab-5366042c0f6e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "shares-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/shares-collection-must-be-a-collection",
    "description": "This test case tests that an actor's shares collection is an expected kind of collection",
    "name": "shares collection MUST be either an OrderedCollection or a Collection",
    "uuid": "b03a5245-1072-426d-91b3-a3d412d45ae8"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "inputs": {
      "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
    },
    "outcome": "passed",
    "source": []
  },
  "test": {
    "slug": "actor-objects-must-have-inbox-outbox-properties",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-objects-must-have-inbox-outbox-properties",
    "description": "This rule checks whether a given Actor Object has the properties inbox and outbox.",
    "name": "Actor Objects Must Have Properties `inbox` and `outbox`",
    "uuid": "acaacb5f-8f7e-4f28-8d81-c7955070a767"
  },
  "input": {
    "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "actor-must-serve-as2-object-to-get",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-must-serve-as2-object-to-get",
    "description": "This rule checks that URLs of ActivityPub objects can be resolved to a representation with well-known media type for further processing.",
    "name": "ActivityPub Servers Must Serve Objects in Response to an HTTP GET Request Accepting ActivityStreams 2.0 Media Type",
    "uuid": "e7ee491d-88d7-4e67-80c8-f74781bb247c"
  },
  "input": {
    "id": "https://socialweb.coop/",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the outbox property of an object appears to be an OrderedCollection",
    "name": "outbox must be an OrderedCollection",
    "uuid": "4af549f4-3797-4d99-a151-67c3d8feaa46"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "inbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/inbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the inbox property of an object appears to be an OrderedCollection",
    "name": "inbox must be an OrderedCollection",
    "uuid": "5e94d155-ed4a-4d71-b797-d7c387736ecf"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-post-servers-must-return-a-201-created-http-code",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-post-servers-must-return-a-201-created-http-code",
    "description": "This test checks that an ActivityPub Outbox responds with a 201 status code when sent a POST request with an Activity submission.",
    "name": "Outbox Servers handling activity submissions MUST return a 201 created HTTP status code",
    "uuid": "723afcbb-118d-433e-8ab4-560ffca93582"
  },
  "input": {
    "outbox": "https://socialweb.coop/outbox",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "following-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/following-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `following`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `following` Collection Must be a Collection",
    "uuid": "018c3e17-a1bd-7040-8007-4cd3b9063288"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "followers-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/followers-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a `followers`` collection with an appropriate Collection type",
    "name": "An ActivityPub Actor Object's `followers` Collection Must be a Collection",
    "uuid": "018c3e08-611f-7e56-9f45-2fe5e4877d4e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "liked-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/liked-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a liked collection with an appropriate Collection type",
    "name": "An ActivityPub Object `liked` Collection Must be a Collection",
    "uuid": "018c3df2-d6d8-7f62-805b-b71a96cc6170"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "likes-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/likes-collection-must-be-a-collection",
    "description": "tests whether an ActivityPub Object has a likes collection with an appropriate Collection type",
    "name": "An ActivityPub Object `likes` Collection Must be a Collection",
    "uuid": "200b9bc8-aae3-46f2-a6ab-5366042c0f6e"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "shares-collection-must-be-a-collection",
    "url": "https://socialweb.coop/activitypub/test-cases/shares-collection-must-be-a-collection",
    "description": "This test case tests that an actor's shares collection is an expected kind of collection",
    "name": "shares collection MUST be either an OrderedCollection or a Collection",
    "uuid": "b03a5245-1072-426d-91b3-a3d412d45ae8"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "inputs": {
      "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
    },
    "outcome": "passed",
    "source": []
  },
  "test": {
    "slug": "actor-objects-must-have-inbox-outbox-properties",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-objects-must-have-inbox-outbox-properties",
    "description": "This rule checks whether a given Actor Object has the properties inbox and outbox.",
    "name": "Actor Objects Must Have Properties `inbox` and `outbox`",
    "uuid": "acaacb5f-8f7e-4f28-8d81-c7955070a767"
  },
  "input": {
    "actor": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "actor-must-serve-as2-object-to-get",
    "url": "https://socialweb.coop/activitypub/test-cases/actor-must-serve-as2-object-to-get",
    "description": "This rule checks that URLs of ActivityPub objects can be resolved to a representation with well-known media type for further processing.",
    "name": "ActivityPub Servers Must Serve Objects in Response to an HTTP GET Request Accepting ActivityStreams 2.0 Media Type",
    "uuid": "e7ee491d-88d7-4e67-80c8-f74781bb247c"
  },
  "input": {
    "id": "https://socialweb.coop/",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "inbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/inbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the inbox property of an object appears to be an OrderedCollection",
    "name": "inbox must be an OrderedCollection",
    "uuid": "5e94d155-ed4a-4d71-b797-d7c387736ecf"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "type": "TestResult",
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-must-be-an-orderedcollection",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-must-be-an-orderedcollection",
    "description": "This rule checks whether the outbox property of an object appears to be an OrderedCollection",
    "name": "outbox must be an OrderedCollection",
    "uuid": "4af549f4-3797-4d99-a151-67c3d8feaa46"
  },
  "input": {
    "object": "{\n  \"type\": [\n    \"Organization\"\n  ],\n  \"inbox\": \"https://socialweb.coop/inbox\",\n  \"outbox\": \"https://socialweb.coop/outbox\",\n  \"followers\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"following\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"liked\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"likes\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"shares\": {\n    \"type\": \"OrderedCollection\"\n  },\n  \"id\": \"https://socialweb.coop/\",\n  \"@context\": [\n    \"https://www.w3.org/ns/activitystreams\"\n  ]\n}",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
{
  "type": [
    "Assertion"
  ],
  "result": {
    "outcome": "passed"
  },
  "test": {
    "slug": "outbox-post-servers-must-return-a-201-created-http-code",
    "url": "https://socialweb.coop/activitypub/test-cases/outbox-post-servers-must-return-a-201-created-http-code",
    "description": "This test checks that an ActivityPub Outbox responds with a 201 status code when sent a POST request with an Activity submission.",
    "name": "Outbox Servers handling activity submissions MUST return a 201 created HTTP status code",
    "uuid": "723afcbb-118d-433e-8ab4-560ffca93582"
  },
  "input": {
    "outbox": "https://socialweb.coop/outbox",
    "time": "T10S"
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}