Skip to content

Commit

Permalink
fix(seeder): fix type of Factory methods (#3064)
Browse files Browse the repository at this point in the history
  • Loading branch information
tobiaskraus committed Apr 25, 2022
1 parent ff11a36 commit 06e88e7
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 10 deletions.
12 changes: 6 additions & 6 deletions packages/seeder/src/Factory.ts
Expand Up @@ -9,9 +9,9 @@ export abstract class Factory<T> {

constructor(private readonly em: EntityManager) { }

protected abstract definition(faker: Faker): Partial<T>;
protected abstract definition(faker: Faker): Partial<RequiredEntityData<T>>;

private makeEntity(overrideParameters?: Partial<T>): T {
private makeEntity(overrideParameters?: Partial<RequiredEntityData<T>>): T {
const entity = this.em.create(this.model, {
...this.definition(faker),
...overrideParameters,
Expand All @@ -28,7 +28,7 @@ export abstract class Factory<T> {
* Make a single entity and persist (not flush)
* @param overrideParameters Object specifying what default attributes of the entity factory should be overridden
*/
makeOne(overrideParameters?: Partial<T>): T {
makeOne(overrideParameters?: Partial<RequiredEntityData<T>>): T {
const entity = this.makeEntity(overrideParameters);
this.em.persist(entity);
return entity;
Expand All @@ -39,7 +39,7 @@ export abstract class Factory<T> {
* @param amount Number of entities that should be generated
* @param overrideParameters Object specifying what default attributes of the entity factory should be overridden
*/
make(amount: number, overrideParameters?: Partial<T>): T[] {
make(amount: number, overrideParameters?: Partial<RequiredEntityData<T>>): T[] {
const entities = [...Array(amount)].map(() => {
return this.makeEntity(overrideParameters);
});
Expand All @@ -51,7 +51,7 @@ export abstract class Factory<T> {
* Create (and flush) a single entity
* @param overrideParameters Object specifying what default attributes of the entity factory should be overridden
*/
async createOne(overrideParameters?: Partial<T>): Promise<T> {
async createOne(overrideParameters?: Partial<RequiredEntityData<T>>): Promise<T> {
const entity = this.makeOne(overrideParameters);
await this.em.flush();
return entity;
Expand All @@ -62,7 +62,7 @@ export abstract class Factory<T> {
* @param amount Number of entities that should be generated
* @param overrideParameters Object specifying what default attributes of the entity factory should be overridden
*/
async create(amount: number, overrideParameters?: Partial<T>): Promise<T[]> {
async create(amount: number, overrideParameters?: Partial<RequiredEntityData<T>>): Promise<T[]> {
const entities = this.make(amount, overrideParameters);
await this.em.flush();
return entities;
Expand Down
6 changes: 3 additions & 3 deletions tests/features/seeder/entities/project.entity.ts
@@ -1,4 +1,4 @@
import { Collection, Entity, ManyToOne, OneToMany, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
import { Collection, Entity, IdentifiedReference, ManyToOne, OneToMany, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
import { House } from './house.entity';
import { User } from './user.entity';

Expand All @@ -13,8 +13,8 @@ export class Project {
@Property()
name!: string;

@ManyToOne(() => User)
owner!: User;
@ManyToOne({ entity: () => User, wrappedReference: true })
owner!: IdentifiedReference<User>;

@Property()
worth!: number;
Expand Down
3 changes: 2 additions & 1 deletion tests/features/seeder/factory.test.ts
@@ -1,4 +1,5 @@
import { MikroORM } from '@mikro-orm/core';
import type { RequiredEntityData } from '@mikro-orm/core';
import { Factory } from '@mikro-orm/seeder';
import type { Faker } from '@mikro-orm/seeder';
import { House } from './entities/house.entity';
Expand All @@ -10,7 +11,7 @@ export class ProjectFactory extends Factory<Project> {

model = Project;

definition(faker: Faker): Partial<Project> {
definition(faker: Faker): Partial<RequiredEntityData<Project>> {
return {
name: 'Money vault',
owner: {
Expand Down

0 comments on commit 06e88e7

Please sign in to comment.