fix: DML Enum property (#7846)
* fix: DML Enum property * add more tests * fix unit tests
This commit is contained in:
@@ -827,6 +827,7 @@ describe("Entity builder", () => {
|
|||||||
items: expect.any(Function),
|
items: expect.any(Function),
|
||||||
nullable: false,
|
nullable: false,
|
||||||
name: "role",
|
name: "role",
|
||||||
|
type: "string",
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
reference: "scalar",
|
reference: "scalar",
|
||||||
@@ -935,6 +936,7 @@ describe("Entity builder", () => {
|
|||||||
items: expect.any(Function),
|
items: expect.any(Function),
|
||||||
nullable: false,
|
nullable: false,
|
||||||
name: "role",
|
name: "role",
|
||||||
|
type: "string",
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
reference: "scalar",
|
reference: "scalar",
|
||||||
@@ -1047,6 +1049,7 @@ describe("Entity builder", () => {
|
|||||||
items: expect.any(Function),
|
items: expect.any(Function),
|
||||||
nullable: true,
|
nullable: true,
|
||||||
name: "role",
|
name: "role",
|
||||||
|
type: "string",
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
reference: "scalar",
|
reference: "scalar",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import {
|
|||||||
OnInit,
|
OnInit,
|
||||||
PrimaryKey,
|
PrimaryKey,
|
||||||
Property,
|
Property,
|
||||||
|
Utils,
|
||||||
} from "@mikro-orm/core"
|
} from "@mikro-orm/core"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -152,6 +153,7 @@ export function defineProperty(
|
|||||||
Enum({
|
Enum({
|
||||||
items: () => field.dataType.options!.choices,
|
items: () => field.dataType.options!.choices,
|
||||||
nullable: field.nullable,
|
nullable: field.nullable,
|
||||||
|
type: Utils.getObjectType(field.dataType.options!.choices[0]),
|
||||||
/**
|
/**
|
||||||
* MikroORM does not ignore undefined values for default when generating
|
* MikroORM does not ignore undefined values for default when generating
|
||||||
* the database schema SQL. Conditionally add it here to prevent undefined
|
* the database schema SQL. Conditionally add it here to prevent undefined
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
import {
|
||||||
|
CheckConstraintViolationException,
|
||||||
|
MetadataStorage,
|
||||||
|
MikroORM,
|
||||||
|
} from "@mikro-orm/core"
|
||||||
|
import { model } from "../entity-builder"
|
||||||
|
import { toMikroOrmEntities } from "../helpers/create-mikro-orm-entity"
|
||||||
|
import { createDatabase, dropDatabase } from "pg-god"
|
||||||
|
import { mikroOrmSerializer } from "../../dal"
|
||||||
|
import { FileSystem } from "../../common"
|
||||||
|
import { join } from "path"
|
||||||
|
import { EntityConstructor } from "@medusajs/types"
|
||||||
|
|
||||||
|
const DB_HOST = process.env.DB_HOST
|
||||||
|
const DB_USERNAME = process.env.DB_USERNAME
|
||||||
|
const DB_PASSWORD = process.env.DB_PASSWORD
|
||||||
|
|
||||||
|
const pgGodCredentials = {
|
||||||
|
user: DB_USERNAME,
|
||||||
|
password: DB_PASSWORD,
|
||||||
|
host: DB_HOST,
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileSystem = new FileSystem(join(__dirname, "../../migrations"))
|
||||||
|
|
||||||
|
describe("EntityBuilder | enum", () => {
|
||||||
|
const dbName = "EntityBuilder-enum"
|
||||||
|
|
||||||
|
let orm!: MikroORM
|
||||||
|
let Team: EntityConstructor<any>, User: EntityConstructor<any>
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
fileSystem.cleanup()
|
||||||
|
})
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
MetadataStorage.clear()
|
||||||
|
|
||||||
|
const user = model.define("user", {
|
||||||
|
id: model.id(),
|
||||||
|
username: model.text(),
|
||||||
|
role: model.enum(["admin", "moderator", "editor"]),
|
||||||
|
})
|
||||||
|
|
||||||
|
;[User] = toMikroOrmEntities([user])
|
||||||
|
|
||||||
|
await createDatabase({ databaseName: dbName }, pgGodCredentials)
|
||||||
|
|
||||||
|
orm = await MikroORM.init({
|
||||||
|
entities: [User],
|
||||||
|
tsNode: true,
|
||||||
|
dbName,
|
||||||
|
debug: true,
|
||||||
|
type: "postgresql",
|
||||||
|
})
|
||||||
|
|
||||||
|
const migrator = orm.getMigrator()
|
||||||
|
await migrator.createMigration()
|
||||||
|
await migrator.up()
|
||||||
|
})
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await orm.close()
|
||||||
|
|
||||||
|
await dropDatabase(
|
||||||
|
{ databaseName: dbName, errorIfNonExist: false },
|
||||||
|
pgGodCredentials
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it(`should handle the enum property`, async () => {
|
||||||
|
let manager = orm.em.fork()
|
||||||
|
|
||||||
|
const user1 = manager.create(User, {
|
||||||
|
username: "User 1",
|
||||||
|
role: "admin",
|
||||||
|
})
|
||||||
|
|
||||||
|
await manager.persistAndFlush([user1])
|
||||||
|
manager = orm.em.fork()
|
||||||
|
|
||||||
|
const user = await manager.findOne(User, {
|
||||||
|
id: user1.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(mikroOrmSerializer<InstanceType<typeof User>>(user)).toEqual({
|
||||||
|
id: user1.id,
|
||||||
|
username: "User 1",
|
||||||
|
role: "admin",
|
||||||
|
created_at: expect.any(Date),
|
||||||
|
updated_at: expect.any(Date),
|
||||||
|
deleted_at: null,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it(`should fail to handle the enum property`, async () => {
|
||||||
|
let manager = orm.em.fork()
|
||||||
|
|
||||||
|
const user1 = manager.create(User, {
|
||||||
|
username: "User 1",
|
||||||
|
role: "test",
|
||||||
|
})
|
||||||
|
|
||||||
|
const err = await manager.persistAndFlush([user1]).catch((e) => e)
|
||||||
|
|
||||||
|
expect(err.name).toEqual(CheckConstraintViolationException.name)
|
||||||
|
})
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user