A Test Rule for an ActivityPub Requirement
Use these identifiers to refer to this Test.
urn:uuid:30018b5d-699a-45a9-a623-1f09a36cf0a6
      This slug is memorable, but it is not guaranteed to be globally unique like a URI.
post-outbox-server-overwrites-id-property
      This describes the input that each test run will use to select test targets.
the url to the Outbox handling an Activity POST request
{
  "help": "the url to the Outbox handling an Activity POST request",
  "required": true,
  "type": "xsd:anyUri",
  "rangeIncludes": [
    "https://www.w3.org/ns/activitystreams#outbox"
  ]
}
              {
  "outbox": {
    "help": "the url to the Outbox handling an Activity POST request",
    "required": true,
    "type": "xsd:anyUri",
    "rangeIncludes": [
      "https://www.w3.org/ns/activitystreams#outbox"
    ]
  },
  "authorization": {
    "help": "HTTP Authorization header value to include in outbox POST request",
    "required": false,
    "type": [
      "xsd:string",
      "https://activitypub-testing.socialweb.coop/ns/HiddenInTestResults"
    ],
    "rangeIncludes": [
      "https://www.rfc-editor.org/rfc/rfc9110#field.authorization.value"
    ]
  }
}
      How to derive test targets from input: * let postOutboxResponse be the http response from using an activitypub client to post to input.outbox * if postOutboxResponse does not contain a 'location' header, result outcome is inapplicable. * let outboxResultResponse be the response from using an activitypub client to fetch an activitypub object for the URL indicated by the value of the postOutboxResponse http response header named 'location' * let target.result be the result of parsing outboxResultResponse http response body as JSON. If the response body is not a JSON object, result outcome is inapplicable.
How to derive test targets from input: * let postOutboxResponse be the http response from using an activitypub client to post to input.outbox * if postOutboxResponse does not contain a 'location' header, result outcome is inapplicable. * let outboxResultResponse be the response from using an activitypub client to fetch an activitypub object for the URL indicated by the value of the postOutboxResponse http response header named 'location' * let target.result be the result of parsing outboxResultResponse http response body as JSON. If the response body is not a JSON object, result outcome is inapplicable.
* target.result must be a JSON object
* target.result.id MUST not be the same as input.submission.id
    * rationale: the requirement is that the submission.id MUST be overwrittedn/ignored
* target.result.id MUST be a string
    * rationale: the requirement says the server MUST generate a new id
  
* target.result must be a JSON object
* target.result.id MUST not be the same as input.submission.id
    * rationale: the requirement is that the submission.id MUST be overwrittedn/ignored
* target.result.id MUST be a string
    * rationale: the requirement says the server MUST generate a new id
This Test has been derived from these specified requirements.
{
  "source": "https://www.w3.org/TR/activitypub/",
  "section": {
    "id": "https://www.w3.org/TR/activitypub/#x6-client-to-server-interactions",
    "branch": [
      6
    ]
  },
  "selector": {
    "type": "TextQuoteSelector",
    "exact": "If an Activity is submitted with a value in the id property, servers MUST ignore this and generate a new id for the Activity.\n",
    "suffix": "Servers MUST return a 201 Created HTTP code, and unless the activity is transient, MUST include the new id in the Location header.\n"
  }
}
              {
  "id": "urn:uuid:2bdc4682-308f-42ae-87cf-847f62f64e36",
  "type": "Behavior",
  "uuid": "2bdc4682-308f-42ae-87cf-847f62f64e36",
  "content": "If an Activity is submitted with a value in the id property, servers MUST ignore this and generate a new id for the Activity.\n",
  "context": [
    "https://www.w3.org/TR/activitypub/",
    {
      "name": "Client to server interaction"
    },
    {
      "name": "clients posting Activities to an actor's outbox"
    }
  ],
  "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/#x6-client-to-server-interactions",
      "branch": [
        6
      ]
    },
    "selector": {
      "type": "TextQuoteSelector",
      "exact": "If an Activity is submitted with a value in the id property, servers MUST ignore this and generate a new id for the Activity.\n",
      "suffix": "Servers MUST return a 201 Created HTTP code, and unless the activity is transient, MUST include the new id in the Location header.\n"
    }
  },
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://socialweb.coop/ns/testing/context.json"
  ]
}
              {
  "name": "post outbox server must overwrite id property",
  "description": "A Test Rule for an ActivityPub Requirement",
  "applicability": "\nHow to derive test targets from input:\n* let postOutboxResponse be the http response from using an activitypub client to post to input.outbox\n* if postOutboxResponse does not contain a 'location' header, result outcome is inapplicable.\n* let outboxResultResponse be the response from using an activitypub client to fetch an activitypub object for the URL indicated by the value of the postOutboxResponse http response header named 'location'\n* let target.result be the result of parsing outboxResultResponse http response body as JSON. If the response body is not a JSON object, result outcome is inapplicable.\n",
  "expectations": "\n* target.result must be a JSON object\n* target.result.id MUST not be the same as input.submission.id\n    * rationale: the requirement is that the submission.id MUST be overwrittedn/ignored\n* target.result.id MUST be a string\n    * rationale: the requirement says the server MUST generate a new id\n",
  "slug": "post-outbox-server-overwrites-id-property",
  "uuid": "30018b5d-699a-45a9-a623-1f09a36cf0a6",
  "requirementReference": [
    {
      "id": "urn:uuid:2bdc4682-308f-42ae-87cf-847f62f64e36",
      "url": "https://activitypub-testing-website.socialweb.coop/2bdc4682-308f-42ae-87cf-847f62f64e36"
    }
  ],
  "input": {
    "outbox": {
      "help": "the url to the Outbox handling an Activity POST request",
      "required": true,
      "type": "xsd:anyUri",
      "rangeIncludes": [
        "https://www.w3.org/ns/activitystreams#outbox"
      ]
    },
    "authorization": {
      "help": "HTTP Authorization header value to include in outbox POST request",
      "required": false,
      "type": [
        "xsd:string",
        "https://activitypub-testing.socialweb.coop/ns/HiddenInTestResults"
      ],
      "rangeIncludes": [
        "https://www.rfc-editor.org/rfc/rfc9110#field.authorization.value"
      ]
    }
  },
  "passedCases": [],
  "inapplicableCases": [
    {
      "name": "404 response outbox",
      "input": {
        "outbox": "https://socialweb.coop/activitypub/testing/utilities/response?status=404"
      },
      "result": {
        "outcome": "inapplicable"
      }
    }
  ],
  "attributedTo": [
    {
      "name": "bengo",
      "url": "https://bengo.is/"
    },
    {
      "name": "codenamedmitri"
    }
  ]
}