From 4c49dda1282d5a1452ef583e91c170bcd9ddcab7 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Tue, 19 Sep 2023 12:30:26 +0200 Subject: fix(systemtags): Add one unittest for to test tags parsing after the dependency was updated Signed-off-by: Ferdinand Thiessen --- apps/systemtags/src/utils.spec.ts | 105 ++++++++++++++++++++++++++++++++++++++ apps/systemtags/src/utils.ts | 7 +-- 2 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 apps/systemtags/src/utils.spec.ts (limited to 'apps') 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 + * + * @author Ferdinand Thiessen + * + * @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 . + * + */ + +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[]): 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('?') -- cgit v1.2.3