0
0
Fork 0
mirror of https://github.com/nextcloud/server.git synced 2025-04-26 09:57:51 +00:00
nextcloud_server/apps/systemtags/src/utils.spec.ts
Ferdinand Thiessen da33770752
fix(systemtags): support new attribute parsing of webdav props
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-03-02 15:42:45 +01:00

177 lines
4 KiB
TypeScript

/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import type { DAVResultResponseProps } from 'webdav'
import type { ServerTag, Tag } from './types.js'
import { describe, expect, it } from 'vitest'
import { formatTag, getNodeSystemTags, parseIdFromLocation, parseTags } from './utils'
import { Folder } from '@nextcloud/files'
describe('systemtags - utils', () => {
describe('parseTags', () => {
it('renames properties', () => {
const tags = parseTags([{
props: {
displayname: 'display-name',
resourcetype: {
collection: false,
},
'user-visible': true,
'user-assignable': true,
'can-assign': true,
} as DAVResultResponseProps,
}])
expect(tags).toEqual([
{
displayname: 'display-name',
resourcetype: {
collection: false,
},
userVisible: true,
userAssignable: true,
canAssign: true,
},
])
})
})
describe('parseIdFromLocation', () => {
it('works with simple url', () => {
const url = 'http://some.domain/remote.php/dav/3'
expect(parseIdFromLocation(url)).toEqual(3)
})
it('works with trailing slash', () => {
const url = 'http://some.domain/remote.php/dav/3/'
expect(parseIdFromLocation(url)).toEqual(3)
})
it('works with query', () => {
const url = 'http://some.domain/remote.php/dav/3?some-value'
expect(parseIdFromLocation(url)).toEqual(3)
})
})
describe('formatTag', () => {
it('handles tags', () => {
const tag: Tag = {
canAssign: true,
displayName: 'DisplayName',
userAssignable: true,
userVisible: true,
}
expect(formatTag(tag)).toEqual({
canAssign: true,
name: 'DisplayName',
userAssignable: true,
userVisible: true,
})
})
it('handles server tags', () => {
const tag: ServerTag = {
canAssign: true,
name: 'DisplayName',
userAssignable: true,
userVisible: true,
}
expect(formatTag(tag)).toEqual({
canAssign: true,
name: 'DisplayName',
userAssignable: true,
userVisible: true,
})
})
})
describe('getNodeSystemTags', () => {
it('parses a plain tag', () => {
const node = new Folder({
owner: 'test',
source: 'https://example.com/remote.php/dav/files/test/folder',
attributes: {
'system-tags': {
'system-tag': 'tag',
},
},
})
expect(getNodeSystemTags(node)).toStrictEqual(['tag'])
})
it('parses plain tags', () => {
const node = new Folder({
owner: 'test',
source: 'https://example.com/remote.php/dav/files/test/folder',
attributes: {
'system-tags': {
'system-tag': [
'tag',
'my-tag',
],
},
},
})
expect(getNodeSystemTags(node)).toStrictEqual(['tag', 'my-tag'])
})
it('parses tag with attributes', () => {
const node = new Folder({
owner: 'test',
source: 'https://example.com/remote.php/dav/files/test/folder',
attributes: {
'system-tags': {
'system-tag': {
text: 'tag',
'@can-assign': true,
},
},
},
})
expect(getNodeSystemTags(node)).toStrictEqual(['tag'])
})
it('parses tags with attributes', () => {
const node = new Folder({
owner: 'test',
source: 'https://example.com/remote.php/dav/files/test/folder',
attributes: {
'system-tags': {
'system-tag': [
{
text: 'tag',
'@can-assign': true,
},
{
text: 'my-tag',
'@can-assign': false,
},
],
},
},
})
expect(getNodeSystemTags(node)).toStrictEqual(['tag', 'my-tag'])
})
it('parses tags mixed with and without attributes', () => {
const node = new Folder({
owner: 'test',
source: 'https://example.com/remote.php/dav/files/test/folder',
attributes: {
'system-tags': {
'system-tag': [
'tag',
{
text: 'my-tag',
'@can-assign': false,
},
],
},
},
})
expect(getNodeSystemTags(node)).toStrictEqual(['tag', 'my-tag'])
})
})
})