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', () => { 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, + }, + }); +} 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;