Added PUT route on category

This commit is contained in:
Florian Sylvain
2023-02-01 19:08:44 +01:00
parent c0ec0ac899
commit cd62075dc2
2 changed files with 57 additions and 7 deletions
+26 -5
View File
@@ -12,6 +12,8 @@ const testUserCredentials = {
password: "aaaaaaaaaa" password: "aaaaaaaaaa"
} }
let category_id: number
// Mettre a jour les routes Category en stockant les IDs sur GET pour reutiliser sur DELETE // Mettre a jour les routes Category en stockant les IDs sur GET pour reutiliser sur DELETE
beforeAll(async () => { beforeAll(async () => {
@@ -133,17 +135,36 @@ describe('GET /v1/category', () => {
.set('Content-Type', 'application/json') .set('Content-Type', 'application/json')
.set('Cookie', jwtCookie as string) .set('Cookie', jwtCookie as string)
category_id = res.body.categories[0].id
expect(res.status).toEqual(200) expect(res.status).toEqual(200)
expect(res.body).toHaveProperty('categories') expect(res.body.categories[0].name).toEqual('VueJS Composition API')
})
}) })
it('returns status code 400 and error message', async () => { describe('PUT /v1/category', () => {
it('returns status code 200 and a success message', async () => {
const res = await request(app) const res = await request(app)
.post('/v1/category') .put('/v1/category')
.set('Content-Type', 'application/json') .set('Content-Type', 'application/json')
.set('Cookie', jwtCookie as string) .set('Cookie', jwtCookie as string)
.send(JSON.stringify({ .send(JSON.stringify({
pouet: 'VueJS Composition API' id: category_id,
name: 'VueJS v3 Composition API'
}))
expect(res.status).toEqual(200)
expect(res.body).toHaveProperty('message')
})
it('returns status code 400 and an error message', async () => {
const res = await request(app)
.put('/v1/category')
.set('Content-Type', 'application/json')
.set('Cookie', jwtCookie as string)
.send(JSON.stringify({
id: 2,
pouet: 'salut'
})) }))
expect(res.status).toEqual(400) expect(res.status).toEqual(400)
@@ -158,7 +179,7 @@ describe('DELETE /v1/category', () => {
.set('Content-Type', 'application/json') .set('Content-Type', 'application/json')
.set('Cookie', jwtCookie as string) .set('Cookie', jwtCookie as string)
.send(JSON.stringify({ .send(JSON.stringify({
name: 'VueJS Composition API' id: category_id
})) }))
expect(res.status).toEqual(200) expect(res.status).toEqual(200)
+29
View File
@@ -14,6 +14,12 @@ const categoryDeleteParser = z.object({
id: z.number() id: z.number()
}).required() }).required()
const categoryUpdateParser = z.object({
id: z.number(),
name: z.string().max(50)
}).required()
// TODO Ajouter pagination et queries de recherche
const categoryGet: RequestHandler = async (req, res) => { const categoryGet: RequestHandler = async (req, res) => {
let categories: Category[] | null = null let categories: Category[] | null = null
@@ -44,6 +50,28 @@ const categoryPost: RequestHandler = async (req, res) => {
res.json({ message: 'Category successfully added.' }) res.json({ message: 'Category successfully added.' })
} }
const categoryUpdate: RequestHandler = async (req, res) => {
let updated: Prisma.BatchPayload
try {
const categoryToUpdate = categoryUpdateParser.parse(req.body)
updated = await prisma.category.updateMany({
where: {
id: categoryToUpdate.id,
user_id: req.body.userId
},
data: {
name: categoryToUpdate.name
}
})
} catch (error: any) {
res.status(400).json({ message: (error.issues ?? error) })
return;
}
res.json({ message: `${updated.count} category / categories successfully updated.` })
}
const categoryDelete: RequestHandler = async (req, res) => { const categoryDelete: RequestHandler = async (req, res) => {
let deleted: Prisma.BatchPayload let deleted: Prisma.BatchPayload
@@ -65,6 +93,7 @@ const categoryDelete: RequestHandler = async (req, res) => {
categoryRouter.get('/', userIdMiddleware, categoryGet) categoryRouter.get('/', userIdMiddleware, categoryGet)
categoryRouter.post('/', userIdMiddleware, categoryPost) categoryRouter.post('/', userIdMiddleware, categoryPost)
categoryRouter.put('/', userIdMiddleware, categoryUpdate)
categoryRouter.delete('/', userIdMiddleware, categoryDelete) categoryRouter.delete('/', userIdMiddleware, categoryDelete)
export default categoryRouter export default categoryRouter