From 6112d66bdabf2c629f3e675cd4bdeef687a30035 Mon Sep 17 00:00:00 2001 From: Maddy Guthridge Date: Wed, 28 Aug 2024 20:48:53 +1000 Subject: [PATCH] Make groups and items be listed by default --- src/routes/api/group/[groupId]/+server.ts | 3 +++ src/routes/api/group/[groupId]/item/[itemId]/+server.ts | 6 +++++- tests/backend/group/create.test.ts | 8 ++++++++ tests/backend/group/item/create.test.ts | 8 ++++++++ tsconfig.json | 4 +++- 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/routes/api/group/[groupId]/+server.ts b/src/routes/api/group/[groupId]/+server.ts index 7643a0ba..ed4967a4 100644 --- a/src/routes/api/group/[groupId]/+server.ts +++ b/src/routes/api/group/[groupId]/+server.ts @@ -5,6 +5,7 @@ import { object, string, validate } from 'superstruct'; import { getPortfolioGlobals, invalidatePortfolioGlobals } from '$lib/server/data/index'; import { validateId, validateName } from '$lib/validators'; import { removeAllLinksToItem } from '$lib/server/links.js'; +import { setConfig } from '$lib/server/data/config.js'; export async function GET({ params, request, cookies }) { const groupId = params.groupId; @@ -38,6 +39,8 @@ export async function POST({ params, request, cookies }) { } await createGroup(groupId, name, description); + data.config.listedGroups.push(groupId); + await setConfig(data.config); invalidatePortfolioGlobals(); return json({}, { status: 200 }); diff --git a/src/routes/api/group/[groupId]/item/[itemId]/+server.ts b/src/routes/api/group/[groupId]/item/[itemId]/+server.ts index f4c5b4f1..21a9ad8e 100644 --- a/src/routes/api/group/[groupId]/item/[itemId]/+server.ts +++ b/src/routes/api/group/[groupId]/item/[itemId]/+server.ts @@ -1,5 +1,5 @@ import { error, json } from '@sveltejs/kit'; -import { getGroupInfo } from '$lib/server/data/group'; +import { getGroupInfo, setGroupInfo } from '$lib/server/data/group'; import { validateTokenFromRequest } from '$lib/server/auth'; import { object, string, validate } from 'superstruct'; import { createItem, setItemInfo, ItemInfoFullStruct, deleteItem } from '$lib/server/data/item.js'; @@ -45,6 +45,10 @@ export async function POST({ params, request, cookies }) { } await createItem(groupId, itemId, name, description); + + const groupInfo = data.groups[groupId].info; + groupInfo.listedItems.push(itemId); + await setGroupInfo(groupId, groupInfo); invalidatePortfolioGlobals(); return json({}, { status: 200 }); diff --git a/tests/backend/group/create.test.ts b/tests/backend/group/create.test.ts index 29f532b9..0040680f 100644 --- a/tests/backend/group/create.test.ts +++ b/tests/backend/group/create.test.ts @@ -55,4 +55,12 @@ describe('Other test cases', () => { () => api, api => api.group.withId(groupId).create('Group name', 'Group description'), ); + + test('New groups are listed by default', async () => { + await api.group.withId(groupId).create('Group name', 'Group description'); + // Group should be listed + await expect(api.admin.config.get()).resolves.toMatchObject({ + listedGroups: [groupId] + }); + }); }); diff --git a/tests/backend/group/item/create.test.ts b/tests/backend/group/item/create.test.ts index 2bb062d3..c4dd0ff0 100644 --- a/tests/backend/group/item/create.test.ts +++ b/tests/backend/group/item/create.test.ts @@ -65,6 +65,14 @@ describe('Other test cases', async () => { .rejects.toMatchObject({ code: 404 }); }); + test('New items are listed in their group by default', async () => { + await api.group.withId(groupId).item.withId('item-id').create('Item name', 'Item description'); + // Item should be listed + await expect(api.group.withId(groupId).info.get()).resolves.toMatchObject({ + listedItems: ['item-id'] + }); + }); + genTokenTests( () => api, api => api.group.withId(groupId).item.withId('item-id').create('My item', ''), diff --git a/tsconfig.json b/tsconfig.json index a10a4322..82efd26f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,9 @@ "moduleResolution": "bundler", }, // Add Jest extended to vitest - "files": ["tests/setup/jestExtended.d.ts"], + "files": [ + "tests/setup/jestExtended.d.ts" + ], // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias // except $lib which is handled by https://kit.svelte.dev/docs/configuration#files //