diff --git a/server/auth/index.ts b/server/auth/index.ts index 2674933..d7019e4 100644 --- a/server/auth/index.ts +++ b/server/auth/index.ts @@ -1,12 +1,11 @@ import { IUser, IUserAuth } from "../schemas"; import { User } from "../models/user"; -import { Collection } from "../models/collection"; import createError from "http-errors"; import bcrypt from "bcrypt"; import now from "../util/now"; const UserInstance = new User(); -const CollectionInstance = new Collection(); + export default class AuthService { // methods for local strategies async register(data: IUser) { @@ -18,8 +17,6 @@ export default class AuthService { data.isadmin = false; try { - let receivedUser: IUser | undefined; - // not allowed to use email address that already exists const user = await UserInstance.getOneByEmail(email); if (user) throw createError('409', 'Email already in use'); diff --git a/server/jest/helpers/randomEmail.ts b/server/jest/helpers/randomEmail.ts new file mode 100644 index 0000000..6384946 --- /dev/null +++ b/server/jest/helpers/randomEmail.ts @@ -0,0 +1,11 @@ +import alphanumeric from "../../util/alphanumeric"; + +export default function randomEmail() { + let randomName = '' + for (let i = 0; i < 20; i++) { + const char = Math.floor(Math.random() * alphanumeric.length); + randomName += alphanumeric[char]; + } + + return randomName + '@testemail.com'; +} \ No newline at end of file diff --git a/server/jest/helpers/randomHandle.ts b/server/jest/helpers/randomHandle.ts new file mode 100644 index 0000000..b6fe9b3 --- /dev/null +++ b/server/jest/helpers/randomHandle.ts @@ -0,0 +1,11 @@ +import alphanumeric from "../../util/alphanumeric"; + +export default function randomHandle() { + let randomHandle = ''; + for (let i = 0; i < 20; i++) { + const char = Math.floor(Math.random() * alphanumeric.length); + randomHandle += alphanumeric[char]; + } + + return randomHandle; +} \ No newline at end of file diff --git a/server/jest/tests/auth/index.test.ts b/server/jest/tests/auth/index.test.ts new file mode 100644 index 0000000..0703fad --- /dev/null +++ b/server/jest/tests/auth/index.test.ts @@ -0,0 +1,79 @@ +import AuthService from "../../../auth"; +import request from 'supertest'; +import randomEmail from "../../helpers/randomEmail"; +import randomHandle from "../../helpers/randomHandle"; +import { IUser, IUserAuth } from "../../../schemas"; + +const server = request.agent('localhost:8080'); +const myAccount = { +} + +describe('class AuthService', () => { + let mockUser: IUser; + beforeEach(() => { + mockUser = { + firstname: "mock", + lastname: "user", + email: randomEmail(), + password: 'testpassword', + handle: randomHandle(), + isadmin: false + } + }) + + // save user data from successful registration attempt + let extantUser: IUser | undefined; + + describe('register', () => { + test('register', () => { + extantUser = mockUser; + + server + .post('/auth/register') + .send(mockUser) + .set('accept', 'application/json') + .end((err, res) => { + if (err) throw err; + expect(res.status).toEqual(200); + expect(res.body.ok).toBe(true); + }) + }) + }) + + describe('login', () => { + test('extant user can log in', () => { + server.post('/auth/login') + .send(extantUser) + .end((err, res) => { + if (err) throw err; + expect(res.status).toEqual(200); + expect(res.body.ok).toEqual(true); + expect(res.body.user.email).toEqual(extantUser!.email); + }) + }) + + test('cannot login with incorrect credientials', () => { + server.post('/auth/login') + .send(mockUser) + .end((err, res) => { + expect(res.status).toEqual(401); + }) + }) + + test('cannot login if no matching account exists', () => { + + }) + }) + + + + /* + test('google register', () => { + + }) + + test('google login', () => { + + }) + */ +}) \ No newline at end of file diff --git a/server/jest/tests/auth/middlewares.test.ts b/server/jest/tests/auth/middlewares.test.ts new file mode 100644 index 0000000..e69de29 diff --git a/server/jest/tests/now.test.ts b/server/jest/tests/util/now.test.ts similarity index 91% rename from server/jest/tests/now.test.ts rename to server/jest/tests/util/now.test.ts index bc3a678..68c7f7b 100644 --- a/server/jest/tests/now.test.ts +++ b/server/jest/tests/util/now.test.ts @@ -1,4 +1,4 @@ -import now from "../../util/now"; +import now from "../../../util/now"; describe('now utility', () => { it('returns a string', () => { diff --git a/server/jest/tests/util/randomEmail.test.ts b/server/jest/tests/util/randomEmail.test.ts new file mode 100644 index 0000000..df4bc22 --- /dev/null +++ b/server/jest/tests/util/randomEmail.test.ts @@ -0,0 +1,14 @@ +import randomEmail from "../../helpers/randomEmail" + +describe('randomEmail', () => { + test('returns a string', () => { + expect(typeof randomEmail() == 'string').toBeTruthy(); + }) + + test('returns unique outputs', () => { + const first = randomEmail(); + const second = randomEmail(); + + expect(first).not.toEqual(second); + }) +}) \ No newline at end of file diff --git a/server/jest/tests/util/randomHandle.test.ts b/server/jest/tests/util/randomHandle.test.ts new file mode 100644 index 0000000..da0caf5 --- /dev/null +++ b/server/jest/tests/util/randomHandle.test.ts @@ -0,0 +1,14 @@ +import randomHandle from "../../helpers/randomHandle" + +describe('randomHandle', () => { + test('returns a string', () => { + expect(typeof randomHandle() == 'string').toBeTruthy(); + }) + + test('returns unique outputs', () => { + const first = randomHandle(); + const second = randomHandle(); + + expect(first).not.toEqual(second); + }) +}) \ No newline at end of file diff --git a/server/package.json b/server/package.json index 0eecc3c..e0820bd 100644 --- a/server/package.json +++ b/server/package.json @@ -10,7 +10,8 @@ "dev": "rm -rf dist && ./node_modules/.bin/tsc --project ./tsconfig.json --watch & ts-node-dev index.ts", "prod": "npm run build && node dist/index.js", "test": "jest --coverage", - "test:watch": "jest --watch" + "test:watch": "jest --watch", + "test:o": "jest -o" }, "author": "", "license": "ISC", diff --git a/server/util/alphanumeric.ts b/server/util/alphanumeric.ts new file mode 100644 index 0000000..28b02ce --- /dev/null +++ b/server/util/alphanumeric.ts @@ -0,0 +1,2 @@ +const alphanumeric = 'abcdefghijklmnopqrstuvwxyz1234567890' +export default alphanumeric; \ No newline at end of file