From 3f9c2ed291f5515fab7d00a6228fabe6b1ca8c20 Mon Sep 17 00:00:00 2001 From: Muncherkin <48158637+Muncherkin@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:55:55 +0100 Subject: [PATCH] Fixed after Froborgs comments --- prisma/data/activity.seed.ts | 133 +++++++++++++++++++++++++++++ prisma/data/seed.ts | 3 + prisma/schema.prisma | 3 +- src/api/activity.api.ts | 67 ++++++++++----- src/api/ticket.api.ts | 48 +++++------ src/models/generated/graphql.ts | 26 +++--- src/resolvers/activity.resolver.ts | 8 +- src/resolvers/ticket.resolver.ts | 8 +- src/schemas/activity.graphql | 10 +-- src/schemas/ticket.graphql | 4 +- test/unit/activity.api.test.ts | 4 +- test/unit/ticket.api.test.ts | 7 +- 12 files changed, 241 insertions(+), 80 deletions(-) create mode 100644 prisma/data/activity.seed.ts diff --git a/prisma/data/activity.seed.ts b/prisma/data/activity.seed.ts new file mode 100644 index 00000000..670a4533 --- /dev/null +++ b/prisma/data/activity.seed.ts @@ -0,0 +1,133 @@ +import { Prisma, PrismaActivitySource, PrismaUtskott } from '@prisma/client'; + +function getRandomDate(): Date { + const today = new Date(); + const oneYearForward = new Date(today.getTime() + 365 * 24 * 60 * 60 * 1000); // Adding milliseconds for one year + + const randomTime = today.getTime() + Math.random() * (oneYearForward.getTime() - today.getTime()); + return new Date(randomTime); +} + +export const activities: Prisma.PrismaActivityCreateInput[] = [ + { + utskott: PrismaUtskott.CM, + source: PrismaActivitySource.WEBSITE, + title: 'Baktävling', + description: + '"Välkommen till vårt mysiga café där doften av nybakat bröd och kaffe möter dig i dörren. Varje dag bjuder vi på en smakupplevelse utöver det vanliga, och nu är det din chans att delta i vår spännande baktävling! Ge din kreativitet fria tyglar och skapa det perfekta bakverket som kommer att imponera på vår jury. Vem vet, kanske blir just din skapelse den nya favoriten på vårt café! Så plocka fram dina bästa recept och låt bakningen börja!"', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, + { + utskott: PrismaUtskott.FVU, + source: PrismaActivitySource.WEBSITE, + title: 'Fixar-kväll', + description: + 'Känn pulsen i vår fixar-kväll, där passion och kreativitet förenas i en atmosfär av skapande. Tillsammans bygger vi, skapar och inspireras av varandras projekt. Låt idéerna flöda och låt dina händer forma det du drömmer om. Kom och var en del av vår gemenskap för en oförglömlig kväll!', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, + { + utskott: PrismaUtskott.INFU, + source: PrismaActivitySource.WEBSITE, + title: 'Hacker', + description: + 'Välkommen till det ultimata hacker eventet där kreativitet och teknologi möts i en spännande atmosfär. Här samlas hackare från hela världen för att utforska nya gränser och lösa utmaningar. Ta del av inspirerande föreläsningar, knäck koder och skapa banbrytande innovationer tillsammans med oss!', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, + { + utskott: PrismaUtskott.KM, + source: PrismaActivitySource.WEBSITE, + title: 'Gille', + description: + '"Välkommen till vårt gemytliga gille där vänner samlas för goda drycker och skrattfyllda stunder. Njut av vårt utbud av förfriskningar och klassiska rätter i en avslappnad atmosfär. Låt kvällen ta fart med livlig musik och härlig stämning. Kom och upplev en kväll att minnas på vårt charmiga gille!"', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, + { + utskott: PrismaUtskott.NOLLU, + source: PrismaActivitySource.WEBSITE, + title: 'Regattan', + description: + 'Känn spänningen på regattan, där havet blir slagfält och seglen sträcks mot vindens kraft. Deltagare från alla hörn av världen tävlar om ära och berömmelse i detta episka sjökrig. Stå öga mot öga med dina motståndare och visa din skicklighet på de vilda vågorna. Detta är inte bara en tävling, det är ett äventyr till havs!', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, + { + utskott: PrismaUtskott.ENU, + source: PrismaActivitySource.WEBSITE, + title: 'Lunchföreläsning', + description: + 'Välkommen till vår inspirerande lunchföreläsning där vi välkomnar ett ledande företag för att dela med sig av sin kunskap och erfarenhet. Njut av en lärorik stund med spännande insikter och möjligheter till nätverkande. Ge dig själv en energiboost mitt på dagen och låt dig inspireras av framgångsrika företagare.', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, + { + utskott: PrismaUtskott.PENGU, + source: PrismaActivitySource.WEBSITE, + title: 'Bokföringskväll', + description: + 'Det är dags att ta tag i bokföringen tillsammans! I vår grupp samlas vi för att effektivt hantera våra ekonomiska transaktioner och säkerställa noggrannheten i våra bokföringsposter. Med teamwork och noggrant arbete ser vi till att varje siffra landar rätt och att vår ekonomi är i balans.', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, + { + utskott: PrismaUtskott.E6, + source: PrismaActivitySource.WEBSITE, + title: 'Sittning', + description: + 'Välkommen till en kväll fylld av gemenskap och glädje! Vi öppnar våra dörrar för en minnesvärd sittning där vi samlas för god mat, gott sällskap och underhållande samtal. Låt oss skapa minnen tillsammans och njuta av en kväll att komma ihåg. Välkommen till vårt bord!', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, + { + utskott: PrismaUtskott.SRE, + source: PrismaActivitySource.WEBSITE, + title: 'Pluggkväll', + description: + 'Det är dags att sätta näsan i böckerna! Välkommen till vår pluggkväll där vi tillsammans fokuserar på att nå våra studiemål. Med lugn atmosfär och gemensamt stöd tar vi itu med utmaningarna och strävar efter framgång. Låt oss inspirera varandra till framsteg och lärande. Tillsammans når vi nya höjder!', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, + { + utskott: PrismaUtskott.STYRELSEN, + source: PrismaActivitySource.WEBSITE, + title: 'Styrelsemöte', + description: + 'Välkommen till vårt styrelsemöte där vi samlas för att diskutera strategier och fatta beslut för sektionens framtid. Med fokus och engagemang går vi igenom dagordningen och arbetar tillsammans mot gemensamma mål. Låt oss samarbeta för att forma en framgångsrik väg framåt. Mötet är nu öppnat!', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, + { + utskott: PrismaUtskott.OTHER, + source: PrismaActivitySource.WEBSITE, + title: 'NolleGasque', + description: + 'Välkomna till årets mest efterlängtade fest, NolleGasquen! En storslagen sittning där vi firar gemenskap, glädje och minnen för livet. Med uppdukade festligheter och en sprakande atmosfär skapar vi magiska ögonblick tillsammans. Låt oss fira studentlivet och välkomna de nya äventyren som väntar!', + startDate: getRandomDate(), + imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp', + locationTitle: '', + locationLink: '', + }, +]; diff --git a/prisma/data/seed.ts b/prisma/data/seed.ts index 15c25a0a..618f5dd5 100644 --- a/prisma/data/seed.ts +++ b/prisma/data/seed.ts @@ -1,6 +1,7 @@ import { PrismaClient } from '@prisma/client'; import { apiKeyAccess, apiKeys, individualAccess, postAccess } from './access.seed'; +import { activities } from './activity.seed'; import { posts } from './post.seed'; import { users } from './user.seed'; @@ -19,6 +20,8 @@ const run = async () => { prisma.prismaPostAccess.createMany({ data: postAccess, skipDuplicates: true }), prisma.prismaApiKeyAccess.createMany({ data: apiKeyAccess, skipDuplicates: true }), ]); + + await prisma.prismaActivity.createMany({ data: activities, skipDuplicates: true }); }; run() diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 29fdecfd..e6c6233f 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -185,12 +185,13 @@ model PrismaActivity { description String? startDate DateTime @map("start_date") endDate DateTime? @map("end_date") - utskott PrismaUtskott? + utskott PrismaUtskott imageUrl String? @map("image_url") locationTitle String? @map("location_title") locationLink String? @map("location_link") tickets PrismaTicket[] } +//sourceUrl for link to event from other apps/websites. model PrismaTicket { id String @id @default(cuid()) diff --git a/src/api/activity.api.ts b/src/api/activity.api.ts index 48bcc51f..c08371fa 100644 --- a/src/api/activity.api.ts +++ b/src/api/activity.api.ts @@ -2,7 +2,7 @@ import { BadRequestError, NotFoundError } from '@/errors/request.errors'; import { StrictObject } from '@/models/base'; import { devGuard, stripObject } from '@/util'; import { ModifiedActivity, NewActivity, Utskott } from '@generated/graphql'; -import { Prisma, PrismaActivity, PrismaActivitySource } from '@prisma/client'; +import { PrismaActivity, PrismaActivitySource } from '@prisma/client'; import prisma from './prisma'; @@ -23,14 +23,8 @@ export class ActivityAPI { async getActivities( from: Date, to: Date, - utskott: Utskott[] | null | undefined, + utskott: Utskott[] = [Utskott.Other], ): Promise { - const whereAnd: Prisma.PrismaActivityWhereInput[] = []; - - if (utskott != null) { - whereAnd.push({ utskott: { in: utskott } }); - } - const a = await prisma.prismaActivity.findMany({ where: { startDate: { @@ -44,7 +38,7 @@ export class ActivityAPI { }, { AND: [{ startDate: { gte: from } }, { endDate: null }] }, ], - AND: whereAnd, + AND: { utskott: { in: utskott } }, }, orderBy: { startDate: 'asc' }, }); @@ -53,7 +47,17 @@ export class ActivityAPI { } async addActivity(activity: NewActivity): Promise { - if (activity.endDate && activity.endDate.getTime() - activity.startDate.getTime() < 0) { + const isAcceptableTime = () => { + const { startDate, endDate } = activity; + + if (!endDate) { + return true; + } + + return endDate.getTime() - startDate.getTime() >= 0; + }; + + if (!isAcceptableTime()) { throw new BadRequestError('Sluttid för aktivitet är före starttid!'); } @@ -64,7 +68,7 @@ export class ActivityAPI { description: activity.description, startDate: activity.startDate, endDate: activity.endDate, - utskott: activity.utskott as Utskott, + utskott: activity.utskott ?? Utskott.Other, imageUrl: activity.imageUrl, locationTitle: activity.location?.title, locationLink: activity.location?.link, @@ -73,27 +77,43 @@ export class ActivityAPI { return res; } - async modifyActivity(id: string, mod: ModifiedActivity): Promise { + async modifyActivity(id: string, entry: ModifiedActivity): Promise { const a = await this.getActivity(id); - if (mod.endDate) { - if (mod.startDate && mod.endDate.getTime() - mod.startDate.getTime() < 0) { - throw new BadRequestError('Modifierad sluttid för aktivitet är före modifierad starttid!'); - } else if (!mod.startDate && mod.endDate.getTime() - a.startDate.getTime() < 0) { - throw new BadRequestError('Modifierad sluttid för aktivitet är före starttiden!'); + + const isAcceptableTime = () => { + const { startDate, endDate } = entry; + + if (endDate) { + if (startDate) { + return endDate.getTime() - startDate.getTime() >= 0; + } + return endDate.getTime() - a.startDate.getTime() >= 0; + } else if (startDate) { + if (!a.endDate) { + return true; + } + return a.endDate.getTime() - startDate.getTime() >= 0; } + + return true; + }; + + if (!isAcceptableTime()) { + throw new BadRequestError('Ny slut- och starttid för aktivitet är omöjlig!'); } + if (a.source !== PrismaActivitySource.WEBSITE) { throw new BadRequestError( 'Ej tillåtet att ändra i evenemang som inte är skapade på hemsidan!', ); } - const { location, ...reduced } = mod; + const { location, ...reduced } = entry; const refact = { ...reduced, - locationTitle: mod.location?.title, - locationLink: mod.location?.link, + locationTitle: entry.location?.title, + locationLink: entry.location?.link, }; const update: StrictObject = stripObject(refact); @@ -105,15 +125,16 @@ export class ActivityAPI { return res; } - async removeActivity(id: string): Promise { + async removeActivity(id: string): Promise { const a = await this.getActivity(id); if (a.source !== PrismaActivitySource.WEBSITE) { throw new BadRequestError( 'Ej tillåtet att ta bort evenemang som inte är skapade på hemsidan!', ); } - await prisma.prismaActivity.delete({ where: { id } }); - return true; + const res = await prisma.prismaActivity.delete({ where: { id } }); + + return res; } async clear() { diff --git a/src/api/ticket.api.ts b/src/api/ticket.api.ts index 0336be85..1894822a 100644 --- a/src/api/ticket.api.ts +++ b/src/api/ticket.api.ts @@ -35,15 +35,15 @@ export class TicketAPI { } async addTicket(ticket: NewTicket): Promise { - if (ticket.activityID != null) { - try { - await activityApi.getActivity(ticket.activityID); - } catch { - throw new BadRequestError( - 'Biljett kunde inte skapas! Specifierad activityID tillhörde inte någon activity.', - ); - } - } + // if (ticket.activityID != null) { + // try { + // await activityApi.getActivity(ticket.activityID); + // } catch { + // throw new BadRequestError( + // 'Biljett kunde inte skapas! Specifierad activityID tillhörde inte någon activity.', + // ); + // } + // } const t = await prisma.prismaTicket.create({ data: { @@ -58,20 +58,20 @@ export class TicketAPI { return t; } - async modifyTicket(id: string, mod: ModifiedTicket): Promise { + async modifyTicket(id: string, entry: ModifiedTicket): Promise { await this.getTicket(id); - if (mod.activityID != null) { - try { - await activityApi.getActivity(mod.activityID); - } catch { - throw new BadRequestError( - 'Biljett kunde inte modifieras! Modifierad activityID tillhörde inte någon activity.', - ); - } - } - - const { ...rest } = mod; + // if (mod.activityID != null) { + // try { + // await activityApi.getActivity(mod.activityID); + // } catch { + // throw new BadRequestError( + // 'Biljett kunde inte modifieras! Modifierad activityID tillhörde inte någon activity.', + // ); + // } + // } + + const { ...rest } = entry; const update: StrictObject = stripObject(rest); const t = prisma.prismaTicket.update({ @@ -82,11 +82,11 @@ export class TicketAPI { return t; } - async removeTicket(id: string): Promise { + async removeTicket(id: string): Promise { await this.getTicket(id); - await prisma.prismaTicket.delete({ where: { id } }); - return true; + const t = await prisma.prismaTicket.delete({ where: { id } }); + return t; } async clear() { diff --git a/src/models/generated/graphql.ts b/src/models/generated/graphql.ts index b8c449af..235bdce9 100644 --- a/src/models/generated/graphql.ts +++ b/src/models/generated/graphql.ts @@ -50,7 +50,7 @@ export type Activity = { source: ActivitySource; startDate: Scalars['Date']; title: Scalars['String']; - utskott?: Maybe; + utskott: Utskott; }; export enum ActivitySource { @@ -387,7 +387,7 @@ export type Mutation = { propose: Scalars['Boolean']; providerLogin: LoginResponse; refresh: TokenResponse; - removeActivity: Scalars['Boolean']; + removeActivity: Activity; removeArticle: Scalars['Boolean']; removeElectables: Scalars['Boolean']; removeEmergencyContact: Scalars['Boolean']; @@ -396,7 +396,7 @@ export type Mutation = { removeHistoryEntry: Scalars['Boolean']; removeMeeting: Scalars['Boolean']; removeProposal: Scalars['Boolean']; - removeTicket: Scalars['Boolean']; + removeTicket: Ticket; requestPasswordReset: Scalars['Boolean']; resetPassword: Scalars['Boolean']; /** Only possible during open election, so electionId is known */ @@ -558,8 +558,8 @@ export type MutationLoginArgs = { export type MutationModifyActivityArgs = { + entry: ModifiedActivity; id: Scalars['String']; - mod: ModifiedActivity; }; @@ -575,8 +575,8 @@ export type MutationModifyPostArgs = { export type MutationModifyTicketArgs = { + entry: ModifiedTicket; id: Scalars['String']; - mod: ModifiedTicket; }; @@ -751,7 +751,7 @@ export type NewActivity = { location?: InputMaybe; startDate: Scalars['Date']; title: Scalars['String']; - utskott?: InputMaybe; + utskott: Utskott; }; export type NewArticle = { @@ -929,7 +929,7 @@ export type Query = { export type QueryActivitiesArgs = { from: Scalars['Date']; to: Scalars['Date']; - utskott?: InputMaybe>; + utskott: Array; }; @@ -1571,7 +1571,7 @@ export type ActivityResolvers; startDate?: Resolver; title?: Resolver; - utskott?: Resolver, ParentType, ContextType>; + utskott?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -1754,16 +1754,16 @@ export type MutationResolvers>; login?: Resolver>; logout?: Resolver; - modifyActivity?: Resolver>; + modifyActivity?: Resolver>; modifyArticle?: Resolver>; modifyPost?: Resolver>; - modifyTicket?: Resolver>; + modifyTicket?: Resolver>; nominate?: Resolver>; openElection?: Resolver>; propose?: Resolver>; providerLogin?: Resolver>; refresh?: Resolver>; - removeActivity?: Resolver>; + removeActivity?: Resolver>; removeArticle?: Resolver>; removeElectables?: Resolver>; removeEmergencyContact?: Resolver>; @@ -1772,7 +1772,7 @@ export type MutationResolvers>; removeMeeting?: Resolver>; removeProposal?: Resolver>; - removeTicket?: Resolver>; + removeTicket?: Resolver>; requestPasswordReset?: Resolver>; resetPassword?: Resolver>; respondToNomination?: Resolver>; @@ -1823,7 +1823,7 @@ export type ProposalResolvers; export type QueryResolvers = ResolversObject<{ - activities?: Resolver, ParentType, ContextType, RequireFields>; + activities?: Resolver, ParentType, ContextType, RequireFields>; activity?: Resolver>; apiKey?: Resolver>; apiKeys?: Resolver, ParentType, ContextType>; diff --git a/src/resolvers/activity.resolver.ts b/src/resolvers/activity.resolver.ts index 27b23616..2bf5c607 100644 --- a/src/resolvers/activity.resolver.ts +++ b/src/resolvers/activity.resolver.ts @@ -27,15 +27,15 @@ const activityresolver: Resolvers = { const a = await activityApi.addActivity(activity); return activityReducer(a); }, - modifyActivity: async (_, { id, mod }, ctx) => { + modifyActivity: async (_, { id, entry }, ctx) => { await hasAccess(ctx, Feature.ActivityAdmin); - const a = await activityApi.modifyActivity(id, mod); + const a = await activityApi.modifyActivity(id, entry); return activityReducer(a); }, removeActivity: async (_, { id }, ctx) => { await hasAccess(ctx, Feature.ActivityAdmin); - const res = activityApi.removeActivity(id); - return res; + const a = await activityApi.removeActivity(id); + return activityReducer(a); }, }, }; diff --git a/src/resolvers/ticket.resolver.ts b/src/resolvers/ticket.resolver.ts index 1b22f927..2779c262 100644 --- a/src/resolvers/ticket.resolver.ts +++ b/src/resolvers/ticket.resolver.ts @@ -28,16 +28,16 @@ const ticketResolver: Resolvers = { return ticketReducer(t); }, - modifyTicket: async (_, { id, mod }, ctx) => { + modifyTicket: async (_, { id, entry }, ctx) => { await hasAccess(ctx, Feature.ActivityAdmin); - const t = await tikcketApi.modifyTicket(id, mod); + const t = await tikcketApi.modifyTicket(id, entry); return ticketReducer(t); }, removeTicket: async (_, { id }, ctx) => { await hasAccess(ctx, Feature.ActivityAdmin); - const res = await tikcketApi.removeTicket(id); - return res; + const t = await tikcketApi.removeTicket(id); + return ticketReducer(t); }, }, }; diff --git a/src/schemas/activity.graphql b/src/schemas/activity.graphql index f076e155..23e7037c 100644 --- a/src/schemas/activity.graphql +++ b/src/schemas/activity.graphql @@ -5,13 +5,13 @@ scalar Date type Query{ activity(id: String!) : Activity! - activities(from: Date!, to: Date!, utskott: [Utskott!]) : [Activity!]! + activities(from: Date!, to: Date!, utskott: [Utskott!]!) : [Activity!]! } type Mutation{ addActivity(activity: NewActivity!) : Activity! - modifyActivity(id: String!, mod: ModifiedActivity!) : Activity! - removeActivity(id: String!) : Boolean! + modifyActivity(id: String!, entry: ModifiedActivity!) : Activity! + removeActivity(id: String!) : Activity! } type Activity{ @@ -21,7 +21,7 @@ type Activity{ description: String startDate: Date! endDate: Date - utskott: Utskott + utskott: Utskott! imageUrl: String location: Location } @@ -41,7 +41,7 @@ input NewActivity{ description: String startDate: Date! endDate: Date - utskott: Utskott + utskott: Utskott! imageUrl: String location: NewLocation } diff --git a/src/schemas/ticket.graphql b/src/schemas/ticket.graphql index a6725310..3712966b 100644 --- a/src/schemas/ticket.graphql +++ b/src/schemas/ticket.graphql @@ -7,8 +7,8 @@ type Query{ type Mutation{ addTicket(ticket: NewTicket!) : Ticket! - modifyTicket(id: String!, mod: ModifiedTicket!) : Ticket! - removeTicket(id: String!) : Boolean! + modifyTicket(id: String!, entry: ModifiedTicket!) : Ticket! + removeTicket(id: String!) : Ticket! } type Ticket{ diff --git a/test/unit/activity.api.test.ts b/test/unit/activity.api.test.ts index b15db6fa..854b89ed 100644 --- a/test/unit/activity.api.test.ts +++ b/test/unit/activity.api.test.ts @@ -106,7 +106,7 @@ test('Getting activities', async () => { const acts = await activityApi.getActivities( new Date('2024-01-30'), new Date('2024-02-28'), - null, + Object.entries(Utskott).map((u) => u[1]), ); expect(acts.length).toBe(6); @@ -127,7 +127,7 @@ test('Adding and removing activities', async () => { const added = await activityApi.addActivity(newAct); expect(added).toBeTruthy(); - const removed = activityApi.removeActivity(added.id); + const removed = await activityApi.removeActivity(added.id); expect(removed).toBeTruthy(); await expect(activityApi.removeActivity(orbiAct.id)).rejects.toThrowError(BadRequestError); //Not allowed to remove non website activity diff --git a/test/unit/ticket.api.test.ts b/test/unit/ticket.api.test.ts index c7b3cc8d..2d2e225f 100644 --- a/test/unit/ticket.api.test.ts +++ b/test/unit/ticket.api.test.ts @@ -3,6 +3,7 @@ import { BadRequestError, NotFoundError } from '@/errors/request.errors'; import { TicketAPI } from '@api/ticket'; import { ModifiedTicket, NewTicket } from '@generated/graphql'; import { PrismaActivity, PrismaActivitySource, PrismaUtskott } from '@prisma/client'; +import { PrismaClientKnownRequestError } from '@prisma/client/runtime'; const ticketApi = new TicketAPI(); @@ -54,7 +55,9 @@ test('Adding and removing tickets', async () => { expect(actSuccess).toBeTruthy(); //Throws if activityID does not belong to an existing activity - await expect(ticketApi.addTicket(falseActTicket)).rejects.toThrowError(BadRequestError); + await expect(ticketApi.addTicket(falseActTicket)).rejects.toThrowError( + PrismaClientKnownRequestError, + ); expect(await ticketApi.removeTicket(notActSuccess.id)).toBeTruthy(); @@ -99,7 +102,7 @@ test('Modifying tickets', async () => { //Modifying a ticket to belong to a non existing act await expect(ticketApi.modifyTicket(actSuccess.id, falseActMod)).rejects.toThrowError( - BadRequestError, + PrismaClientKnownRequestError, ); //Modifying non existing ticket