aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2023-09-19 12:30:26 +0200
committerFerdinand Thiessen <opensource@fthiessen.de>2023-09-19 14:59:13 +0200
commit4c49dda1282d5a1452ef583e91c170bcd9ddcab7 (patch)
tree85597d7dacccd0262f41fb3c7b06b48309352b83 /apps
parent10999467481ebe83e4cddc85d1d226d0b5f93563 (diff)
downloadnextcloud-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.ts105
-rw-r--r--apps/systemtags/src/utils.ts7
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('?')