From dddb51f7d5033c023afbba4335aa31c64ce52c2b Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 25 Oct 2023 13:14:49 +0800 Subject: [PATCH] add test cases --- packages/api/src/repository/index.ts | 5 +- packages/api/test/resolvers/user.test.ts | 4 +- packages/api/test/routers/user.test.ts | 61 ++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 packages/api/test/routers/user.test.ts diff --git a/packages/api/src/repository/index.ts b/packages/api/src/repository/index.ts index 7b02d12a2..9e1dd187d 100644 --- a/packages/api/src/repository/index.ts +++ b/packages/api/src/repository/index.ts @@ -2,6 +2,7 @@ import * as httpContext from 'express-http-context2' import { EntityManager, EntityTarget, Repository } from 'typeorm' import { appDataSource } from '../data_source' import { Claims } from '../resolvers/types' +import { SetClaimsRole } from '../utils/dictionary' export const getColumns = (repository: Repository): (keyof T)[] => { return repository.metadata.columns.map( @@ -12,8 +13,10 @@ export const getColumns = (repository: Repository): (keyof T)[] => { export const setClaims = async ( manager: EntityManager, uid = '00000000-0000-0000-0000-000000000000', - dbRole = 'omnivore_user' + userRole = 'user' ): Promise => { + const dbRole = + userRole === SetClaimsRole.ADMIN ? 'omnivore_admin' : 'omnivore_user' return manager.query('SELECT * from omnivore.set_claims($1, $2)', [ uid, dbRole, diff --git a/packages/api/test/resolvers/user.test.ts b/packages/api/test/resolvers/user.test.ts index 82e0ceefc..d3ac7ea4f 100644 --- a/packages/api/test/resolvers/user.test.ts +++ b/packages/api/test/resolvers/user.test.ts @@ -6,7 +6,7 @@ import { UpdateUserProfileErrorCode, } from '../../src/generated/graphql' import { findProfile } from '../../src/services/profile' -import { deleteUser, findUser } from '../../src/services/user' +import { deleteUser, findActiveUser } from '../../src/services/user' import { hashPassword } from '../../src/utils/auth' import { createTestUser } from '../db' import { generateFakeUuid, graphqlRequest, request } from '../util' @@ -98,7 +98,7 @@ describe('User API', () => { it('updates user and responds with status code 200', async () => { const response = await graphqlRequest(query, authToken).expect(200) - const user = await findUser(response.body.data.updateUser.user.id) + const user = await findActiveUser(response.body.data.updateUser.user.id) expect(user?.name).to.eql(name) }) }) diff --git a/packages/api/test/routers/user.test.ts b/packages/api/test/routers/user.test.ts new file mode 100644 index 000000000..2c4009a8d --- /dev/null +++ b/packages/api/test/routers/user.test.ts @@ -0,0 +1,61 @@ +import { expect } from 'chai' +import 'mocha' +import { In } from 'typeorm' +import { StatusType } from '../../src/entity/user' +import { + createUsers, + deleteUsers, + findUsersById, +} from '../../src/services/user' +import { request } from '../util' + +describe('User Service Router', () => { + const token = process.env.PUBSUB_VERIFICATION_TOKEN || '' + + describe('cleanup', () => { + let toDeleteUserIds: string[] = [] + + before(async () => { + // create test users + const users = await createUsers([ + { + name: 'user_1', + email: 'user_1@omnivore.app', + status: StatusType.Deleted, + updatedAt: new Date(Date.now() - 1000 * 60 * 60 * 24 * 2), // 2 days ago + }, + { + name: 'user_2', + email: 'user_2@omnivore.app', + status: StatusType.Deleted, + updatedAt: new Date(Date.now() - 1000 * 60 * 60 * 24 * 2), // 2 days ago + }, + ]) + toDeleteUserIds = users.map((u) => u.id) + }) + + after(async () => { + // delete test users + await deleteUsers({ id: In(toDeleteUserIds) }) + }) + + it('deletes soft deleted users a day ago', async () => { + const data = { + message: { + data: Buffer.from( + JSON.stringify({ subDays: 1 }) // 1 day ago + ).toString('base64'), + publishTime: new Date().toISOString(), + }, + } + + await request + .post('/api/user/cleanup?token=' + token) + .send(data) + .expect(200) + + const deletedUsers = await findUsersById(toDeleteUserIds) + expect(deletedUsers.length).to.equal(0) + }) + }) +})