From 59fa51c5bf23d89ddd84a9bb00b40f8787755985 Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Tue, 12 Jan 2021 17:14:09 +0000 Subject: [PATCH] Server: Added test units for user login --- .../src/middleware/ownerHandler.test.ts | 47 +++++++++++++++++++ .../server/src/middleware/ownerHandler.ts | 2 +- .../server/src/utils/testing/testUtils.ts | 20 ++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 packages/server/src/middleware/ownerHandler.test.ts diff --git a/packages/server/src/middleware/ownerHandler.test.ts b/packages/server/src/middleware/ownerHandler.test.ts new file mode 100644 index 0000000000..dce3d0dce2 --- /dev/null +++ b/packages/server/src/middleware/ownerHandler.test.ts @@ -0,0 +1,47 @@ +import { createUserAndSession, beforeAllDb, afterAllDb, beforeEachDb, koaAppContext, koaNext } from '../utils/testing/testUtils'; +import ownerHandler from './ownerHandler'; + +describe('ownerHandler', function() { + + beforeAll(async () => { + await beforeAllDb('ownerHandler'); + }); + + afterAll(async () => { + await afterAllDb(); + }); + + beforeEach(async () => { + await beforeEachDb(); + }); + + test('should login user with valid session ID', async function() { + const { user, session } = await createUserAndSession(1, false); + + const context = await koaAppContext({ + sessionId: session.id, + }); + + expect(!!context.owner).toBe(false); + + await ownerHandler(context, koaNext); + + expect(!!context.owner).toBe(true); + expect(context.owner.id).toBe(user.id); + }); + + test('should not login user with invalid session ID', async function() { + await createUserAndSession(1, false); + + const context = await koaAppContext({ + sessionId: 'ihack', + }); + + expect(!!context.owner).toBe(false); + + await ownerHandler(context, koaNext); + + expect(!!context.owner).toBe(false); + }); + +}); diff --git a/packages/server/src/middleware/ownerHandler.ts b/packages/server/src/middleware/ownerHandler.ts index f1f2d42d70..2dc0c8bfc6 100644 --- a/packages/server/src/middleware/ownerHandler.ts +++ b/packages/server/src/middleware/ownerHandler.ts @@ -2,7 +2,7 @@ import { AppContext, KoaNext } from '../utils/types'; import { isApiRequest, contextSessionId } from '../utils/requestUtils'; import Logger from '@joplin/lib/Logger'; -const logger = Logger.create('loggedInUserHandler'); +const logger = Logger.create('ownerHandler'); export default async function(ctx: AppContext, next: KoaNext): Promise { try { diff --git a/packages/server/src/utils/testing/testUtils.ts b/packages/server/src/utils/testing/testUtils.ts index 72ac73524b..9dfac8c82b 100644 --- a/packages/server/src/utils/testing/testUtils.ts +++ b/packages/server/src/utils/testing/testUtils.ts @@ -42,6 +42,7 @@ export async function beforeEachDb() { interface AppContextTestOptions { path?: string; owner?: User; + sessionId?: string; } let koaAppContextUserAndSession_: UserAndSession = null; @@ -52,6 +53,20 @@ export async function koaAppContextUserAndSession(): Promise { return koaAppContextUserAndSession_; } +class FakeCookies { + + private values_: Record = {}; + + public get(name: string): string { + return this.values_[name]; + } + + public set(name: string, value: string) { + this.values_[name] = value; + } + +} + export async function koaAppContext(options: AppContextTestOptions = null): Promise { if (!db_) throw new Error('Database must be initialized first'); @@ -72,6 +87,11 @@ export async function koaAppContext(options: AppContextTestOptions = null): Prom appContext.path = options.path; appContext.owner = options.owner; + appContext.cookies = new FakeCookies(); + + if (options.sessionId) { + appContext.cookies.set('sessionId', options.sessionId); + } return appContext as AppContext; }