From d4883928f9dc4cdb85f0cef1f0c8e41b624c3ebe Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 23 Nov 2021 11:17:03 +0100 Subject: [PATCH] factory for login user --- database/entity/0001-init_db/User.ts | 16 ++++--- database/entity/0002-add_settings/User.ts | 16 ++++--- database/src/factories/login-user.factory.ts | 47 ++++++++++++++++++++ database/src/factories/user.factory.ts | 2 + database/src/seeds/create-user.seed.ts | 7 ++- 5 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 database/src/factories/login-user.factory.ts diff --git a/database/entity/0001-init_db/User.ts b/database/entity/0001-init_db/User.ts index d76711eb1..5f64c34bc 100644 --- a/database/entity/0001-init_db/User.ts +++ b/database/entity/0001-init_db/User.ts @@ -3,22 +3,28 @@ import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from 'typeorm' // Moriz: I do not like the idea of having two user tables @Entity('state_users') export class User extends BaseEntity { - @PrimaryGeneratedColumn() + @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number + @Column({ default: 0, name: 'index_id' }) + indexId: number + + @Column({ default: 0, name: 'group_id', unsigned: true }) + groupId: number + @Column({ type: 'binary', length: 32, name: 'public_key' }) pubkey: Buffer - @Column() + @Column({ length: 255, nullable: true, default: null }) email: string - @Column({ name: 'first_name' }) + @Column({ name: 'first_name', length: 255, nullable: true, default: null }) firstName: string - @Column({ name: 'last_name' }) + @Column({ name: 'last_name', length: 255, nullable: true, default: null }) lastName: string - @Column() + @Column({ length: 255, nullable: true, default: null }) username: string @Column() diff --git a/database/entity/0002-add_settings/User.ts b/database/entity/0002-add_settings/User.ts index 51bbef164..8ec279fdb 100644 --- a/database/entity/0002-add_settings/User.ts +++ b/database/entity/0002-add_settings/User.ts @@ -4,22 +4,28 @@ import { UserSetting } from './UserSetting' // Moriz: I do not like the idea of having two user tables @Entity('state_users') export class User extends BaseEntity { - @PrimaryGeneratedColumn() + @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number + @Column({ default: 0, name: 'index_id' }) + indexId: number + + @Column({ default: 0, name: 'group_id', unsigned: true }) + groupId: number + @Column({ type: 'binary', length: 32, name: 'public_key' }) pubkey: Buffer - @Column() + @Column({ length: 255, nullable: true, default: null }) email: string - @Column({ name: 'first_name' }) + @Column({ name: 'first_name', length: 255, nullable: true, default: null }) firstName: string - @Column({ name: 'last_name' }) + @Column({ name: 'last_name', length: 255, nullable: true, default: null }) lastName: string - @Column() + @Column({ length: 255, nullable: true, default: null }) username: string @Column() diff --git a/database/src/factories/login-user.factory.ts b/database/src/factories/login-user.factory.ts new file mode 100644 index 000000000..5fd64f233 --- /dev/null +++ b/database/src/factories/login-user.factory.ts @@ -0,0 +1,47 @@ +import Faker from 'faker' +import { define } from 'typeorm-seeding' +import { LoginUser } from '../../entity/LoginUser' +import { randomBytes } from 'crypto' + +interface LoginUserContext { + email?: string + firstName?: string + lastName?: string + username?: string + description?: string + password?: BigInt + pubKey?: Buffer + privKey?: Buffer + emailHash?: Buffer + createdAt?: Date + emailChecked?: boolean + passphraseShown?: boolean + language?: string + disabled?: boolean + groupId?: number + publisherId?: number +} + +define(LoginUser, (faker: typeof Faker, context?: LoginUserContext) => { + if (!context) context = {} + + const user = new LoginUser() + user.email = context.email ? context.email : faker.internet.email() + user.firstName = context.firstName ? context.firstName : faker.name.firstName() + user.lastName = context.lastName ? context.lastName : faker.name.lastName() + user.username = context.username ? context.username : faker.internet.userName() + user.description = context.description ? context.description : faker.random.words(4) + user.password = context.password ? context.password : BigInt(0) + user.pubKey = context.pubKey ? context.pubKey : randomBytes(32) + user.privKey = context.privKey ? context.privKey : randomBytes(80) + user.emailHash = context.emailHash ? context.emailHash : randomBytes(32) + user.createdAt = context.createdAt ? context.createdAt : faker.date.recent() + user.emailChecked = context.emailChecked ? context.emailChecked : true + user.passphraseShown = context.passphraseShown ? context.passphraseShown : false + user.language = context.language ? context.language : 'en' + user.disabled = context.disabled ? context.disabled : false + user.groupId = context.groupId ? context.groupId : 1 + user.publisherId = context.publisherId ? context.publisherId : 0 + + return user +}) diff --git a/database/src/factories/user.factory.ts b/database/src/factories/user.factory.ts index 5f9bb420b..ffa32e815 100644 --- a/database/src/factories/user.factory.ts +++ b/database/src/factories/user.factory.ts @@ -22,6 +22,8 @@ define(User, (faker: typeof Faker, context?: UserContext) => { user.lastName = context.lastName ? context.lastName : faker.name.lastName() user.username = context.username ? context.username : faker.internet.userName() user.disabled = context.disabled ? context.disabled : false + user.groupId = 0 + user.indexId = 0 return user }) diff --git a/database/src/seeds/create-user.seed.ts b/database/src/seeds/create-user.seed.ts index a6de48a0c..6ac165a7e 100644 --- a/database/src/seeds/create-user.seed.ts +++ b/database/src/seeds/create-user.seed.ts @@ -3,6 +3,11 @@ import { User } from '../../entity/User' export class CreateUserSeed implements Seeder { public async run(factory: Factory): Promise { - await factory(User)().create() + await factory(User)({ + email: 'peter@lustig.de', + firstName: 'Peter', + lastName: 'Lustig', + username: 'peter', + }).create() } }