diff options
author | Ferdinand Thiessen <opensource@fthiessen.de> | 2023-09-19 12:30:26 +0200 |
---|---|---|
committer | Ferdinand Thiessen <opensource@fthiessen.de> | 2023-09-19 14:59:13 +0200 |
commit | 4c49dda1282d5a1452ef583e91c170bcd9ddcab7 (patch) | |
tree | 85597d7dacccd0262f41fb3c7b06b48309352b83 /apps | |
parent | 10999467481ebe83e4cddc85d1d226d0b5f93563 (diff) | |
download | nextcloud-server-4c49dda1282d5a1452ef583e91c170bcd9ddcab7.tar.gz nextcloud-server-4c49dda1282d5a1452ef583e91c170bcd9ddcab7.zip |
fix(systemtags): Add one unittest for to test tags parsing after the dependency was updated
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/systemtags/src/utils.spec.ts | 105 | ||||
-rw-r--r-- | apps/systemtags/src/utils.ts | 7 |
2 files changed, 109 insertions, 3 deletions
diff --git a/apps/systemtags/src/utils.spec.ts b/apps/systemtags/src/utils.spec.ts new file mode 100644 index 00000000000..d0f30fdf3f9 --- /dev/null +++ b/apps/systemtags/src/utils.spec.ts @@ -0,0 +1,105 @@ +/** + * @copyright 2023 Ferdinand Thiessen <opensource@fthiessen.de> + * + * @author Ferdinand Thiessen <opensource@fthiessen.de> + * + * @license AGPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +import type { DAVResultResponseProps } from 'webdav' +import type { ServerTag, Tag } from './types.js' + +import { describe, it, expect } from '@jest/globals' +import { formatTag, parseIdFromLocation, parseTags } from './utils' + +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, + }) + }) + }) +}) diff --git a/apps/systemtags/src/utils.ts b/apps/systemtags/src/utils.ts index bd85368df53..4978459227f 100644 --- a/apps/systemtags/src/utils.ts +++ b/apps/systemtags/src/utils.ts @@ -22,19 +22,20 @@ import camelCase from 'camelcase' -import type { FileStat } from 'webdav' +import type { DAVResultResponseProps } from 'webdav' import type { ServerTag, Tag, TagWithId } from './types.js' -export const parseTags = (tags: Required<FileStat>[]): TagWithId[] => { +export const parseTags = (tags: { props: DAVResultResponseProps }[]): TagWithId[] => { return tags.map(({ props }) => Object.fromEntries( Object.entries(props) - .map(([key, value]) => [camelCase(key), value]) + .map(([key, value]) => [camelCase(key), value]), )) as TagWithId[] } /** * Parse id from `Content-Location` header + * @param url URL to parse */ export const parseIdFromLocation = (url: string): number => { const queryPos = url.indexOf('?') |