---
# System prepended metadata

title: API Extensions - Tags & Virtual Folders

---

# API Extensions - Tags & Virtual Folders


## Tags

### Create

**Scenarios**:
- [x] Create a tag with valid Name and valid FileType
- [x] Create a tag with empty Name and valid FileType
https://ateliere.atlassian.net/browse/CD-10930
- [x] Create a tag with empty FileType
`{
    "errors":"message": "Variable \"$input\" got invalid value \"\" at \"input.fileType\"; Expected type FileType."`
- [ ] Create tags with all FileTypes (Image, Audio, Metadata, Timed Text etc)
- [x] Create a tag with invalid FileType
   `"errors":"message": "Variable \"$input\" got invalid value \"media container\" at \"input.fileType\"; Expected type FileType. Did you mean media_container?"`
- [x] Create a tag which already exists in Connect
  https://ateliere.atlassian.net/browse/CD-10931

----------------
### Read

**Scenarios**:
- [x] Search for an existing Tag
`{
    "data": {
        "fileDesignationByName": {
            "id": "87737375-f49a-4fed-9f7e-98de6ce8ccfd",
            "name": "raluca tag",
            "fileType": "media_container"
        }
    }
}`

- [x] Search for a Tag which does not exist in Connect 

`{
    "errors": [
        {
            "message": "FileDesignation with name: raluca api testing was not found on organization: c8b2d689-90b5-4a81-8dfc-5ae0aff74f1e!"
        }
    ],
    "data": {
        "fileDesignationByName": null
    }
}`

----------------
### Update

**Scenarios**:

- [x] Update a Tag's Name which is not assigned to any media file

- [x] Update a Tag's Name which is assigned to any media file
   - The tag Name is updated both on Title>Media level and also on Tag module

- [x] Update a Tag's FileType which is not assigned to any media file
  
- [x] Update a Tag's FileType which is assigned to any media file
  - The tag's FileType is updated but on the Title>Media level it becomes as "INVALID TAG"


- [x] Update a Tag which does not exist on the organisation

`{
    "errors": [
        {
            "message": "FileDesignation with name: api tagg was not found on organization: c8b2d689-90b5-4a81-8dfc-5ae0aff74f1e!"
        }
    ],
    "data": {
        "updateFileDesignationByName": null
    }
}`


- [x] Update a Tag with the same values as before, a "false" update
   - Success response but nothing is actually updated


----------------
### Delete


- [x] Delete a tag which is not assigned

- [x] Delete a tag which is assigned to a media

`{
    "errors": [
        {
            "message": "Could not delete this tag because it is used in these files: chloe-197235723.mov"
        }
    ],
    "data": {
        "deleteFileDesignationByName": null
    }
}`


------------------

## Virtual Folders
### Create

**Scenarios**:
- [x] Create a virtual folder giving valid name and titleMetadataLookup
- [x] Create a virtual folder and add it to an existing parent
- [x] Create a virtual folder and add it to a non-existing parent
    - error: `"VirtualFolder with name: vf-parentss was not found on title: 0285f22b-ee9b-48b8-928e-274f94ef7c00!"`
- [x] Create a virtual folder and add it to a parent that's on a different title
    - error: `"VirtualFolder with name: test-auto was not found on title: 0285f22b-ee9b-48b8-928e-274f94ef7c00!"`
- [x] Create a virtual folder without a name
    - error: `"notNull Violation: virtual_folder.slug cannot be null"`
- [x] Create the same virtual folder twice
    - error: `"Failure creating virtual_folder. Error: virtual_folder already exists"`

----------------
### Read

**Scenarios**:
- [x] Search for a folder without a name
    - error: `"VirtualFolder with name:  was not found on title: 0285f22b-ee9b-48b8-928e-274f94ef7c00!"`
- [x] Pass virtualFolderName: null
    - error: `"Variable \"$virtualFolderName\" of non-null type \"String!\" must not be null."`
- [x] Search for an existing folder but from a wrong title
    - error: `"VirtualFolder with name: test-vf was not found on title: 17b025ff-2f28-4b47-80ff-f5c12ae800e6!"`
- [x] Search for a virtual folder in Root
- [x] Search for a virtual folder that's inside a different virtual folder
- [x] Have multiple virtual folders on multiple titles - query returns only one
- [x] Have multiple virtual folders in the same title (at different depths) - query returns all of them


------------------

### Update

**Scenarios:**

- [x] Update a virtual folder's name and parent
- [x] Update multiple virtual folders that have the same name, with the same name and add them to the same parent. (ex: have 2 virtual folders with the same name, inside different virtual folders)
    - query returns: "Validation error" 
    - only one folder is updated
- [x] Update multiple virtual folders that have the same name
    - all folders are updated, query returns all of them
- [x] Move a virtual folder to a different virtual folder (same title)
- [x] Move a virtual folder (from a different folder) to Root, using `"parentName": "Root"`
    - error: `"VirtualFolder with name: Root was not found on title: 17b025ff-2f28-4b47-80ff-f5c12ae800e6!"`
- [x] Move a virtual folder to Root using `"unset":"parentId"`
    - moves the folder to Root
- [x] Move a virtual folder to a different title in Root
- [x] Move a virtual folder to a virtual folder of a different title

------------------


### Delete

**Scenarios:**

- [x] Delete a virtual folder from Root
- [x] Delete multiple virtual folders from different depths
    - all are deleted
- [x] Delete virtual folders from multiple titles
    - error: `"Multiple candidates found for key: api_extension_entity,Global,ohai"`
- [x] Delete a virtual folder twice
    - error:`"VirtualFolder with name: test-vf was not found on title: 0285f22b-ee9b-48b8-928e-274f94ef7c00!"`
- [x] Delete a virtual folder that's inside another virtual folder and both have the same name
    - both are deleted
