Skip to content

ProjectSnippets update with files

Vijay Hawoldar requested to merge vij-project-snippet-rest-update into master

What does this MR do?

This MR adds support for a new parameter called files to the ProjectSnippet REST API update endpoint.

This will allow updating multiple files when the snippet_multiple_files feature flag is enabled (or removed in future).

Refs #217763 (closed)

This is a follow up to !40084 (merged) which adds the same support to the PersonalSnippets endpoint. This MR re-uses the helpers and refactors the specs into shared examples that can be used for both Snippet types.

As can be seen in the referenced issue, we need to have some form of backwards compatibility for API users using the "old" fields (file_name and content instead of files). To achieve this, we are allowing those parameters to be used, unless the snippet has multiple files already.

This is because we cannot rely on just those fields for update actions against a snippet with multiple files (because we need to know which file is being updated).

The field rules this MR should implement are:

  • files required if FF on (or removed) and Snippet has multiple files
  • file_name & content allowed if FF off or Snippet has only a single file
  • files requires action and at least one of either file_path or previous_path
  • files and file_name/content are mutually exclusive

No changelog or docs changes have been added because although the files parameter will be available to be used in this MR, support for multiple files is still behind a feature flag. We have an issue to track the addition of the docs for this, here: #217808 (closed)

Testing

The following is an example curl request you can make to test this endpoint:

curl --request PUT \
     --data '{ "title": "Testing Update", "files": [{"action": "create", "file_path": "testing.md","content": "my content"}]}' \
     --header 'Content-Type: application/json' \
     --header "PRIVATE-TOKEN: <Your Access Token>" \
     "http://127.0.0.1:3000/api/v4/projects/:project_id/snippets/:snippet_id"

Does this MR meet the acceptance criteria?

Conformity

Edited by Vijay Hawoldar

Merge request reports