From f81f56b444c4f47dc00ff595fb197c72b5e087a9 Mon Sep 17 00:00:00 2001 From: jay Date: Mon, 25 Nov 2024 19:00:20 +0000 Subject: [PATCH 1/3] fix seeding issue and add user create test --- __tests__/app.test.ts | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/__tests__/app.test.ts b/__tests__/app.test.ts index 0b43ad1..0fac045 100644 --- a/__tests__/app.test.ts +++ b/__tests__/app.test.ts @@ -2,10 +2,14 @@ import app from '../src/app'; import request from 'supertest'; import endpointsJson from '../src/endpoints.json'; import seeder from '../prisma/seed'; +import { promisify } from 'util'; +import { exec } from 'child_process'; const server = app.listen(6666); -beforeEach(async () => { +beforeAll(async () => { + console.log(`💽 Wiping and re-seeding`); + await promisify(exec)('npx prisma migrate reset --force'); await seeder(); }); @@ -145,6 +149,25 @@ describe('🧪 Express Application', () => { .expect(400); }); }); + + describe('POST /api/users/create', () => { + it('201: should create a new user', () => { + const body = { + username: 'jeepies', + }; + return request(app) + .post('/api/users/create') + .send(body) + .expect(201) + .then(({ body: { success, data } }) => { + expect(success).toBe(true); + expect(data).toMatchObject({ + username: 'jeepies', + requested_privacy: 'PUBLIC', + }); + }); + }); + }); }); describe('Devices', () => { From aed6a0ea22471744241bea49caa8b468c56b8b6a Mon Sep 17 00:00:00 2001 From: jay Date: Mon, 25 Nov 2024 19:00:51 +0000 Subject: [PATCH 2/3] setup route /users/create --- src/routes/users.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/routes/users.ts b/src/routes/users.ts index 93f310f..aff560f 100644 --- a/src/routes/users.ts +++ b/src/routes/users.ts @@ -8,5 +8,6 @@ users.get('/:id/devices', controller.getDevices); users.get('/:id/cats', controller.getCats); users.get('/settings', usernameAuth, controller.getUser); users.patch('/settings', usernameAuth, controller.updateUser); +users.post('/create', controller.createUser); export default users; From 54d818d96462584fa8ffea2d9b10e0d4bc54a36d Mon Sep 17 00:00:00 2001 From: jay Date: Mon, 25 Nov 2024 19:01:04 +0000 Subject: [PATCH 3/3] add logic to /users/create --- src/controllers/users.ts | 22 ++++++++++++++++++++++ src/models/users.ts | 8 ++++++++ 2 files changed, 30 insertions(+) diff --git a/src/controllers/users.ts b/src/controllers/users.ts index 5395cd3..47ca7ed 100644 --- a/src/controllers/users.ts +++ b/src/controllers/users.ts @@ -61,3 +61,25 @@ export function updateUser( res.status(500).send({ msg: 'An internal server error occurred' }); }); } + +export function createUser( + request: Request, + response: Response, + next: NextFunction +) { + const schema = { + username: 'string', + }; + const payload = request.body; + const result = validator(payload, schema); + if (!result.success) return next({ status: 400, message: result.errors }); + + users + .createUser(result.body.username) + .then((data) => { + response.status(201).json({ success: true, data: data }); + }) + .catch(() => + next({ status: 500, message: 'An internal server error occurred' }) + ); +} diff --git a/src/models/users.ts b/src/models/users.ts index 628b1c4..869e96b 100644 --- a/src/models/users.ts +++ b/src/models/users.ts @@ -24,3 +24,11 @@ export function updateUser(username: string, data: object) { data, }); } + +export function createUser(username: string) { + return extendedClient.user.create({ + data: { + username: username, + }, + }); +}