Skip to content

Commit

Permalink
feat: add optional fields
Browse files Browse the repository at this point in the history
  • Loading branch information
thetutlage committed Nov 19, 2024
1 parent b1b7a4a commit 51c784e
Show file tree
Hide file tree
Showing 14 changed files with 342 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ describe("Array property", () => {
name: "array",
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand Down
95 changes: 95 additions & 0 deletions packages/core/utils/src/dml/__tests__/base-property.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ describe("Base property", () => {
name: "text",
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand All @@ -38,6 +39,7 @@ describe("Base property", () => {
},
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand All @@ -59,6 +61,7 @@ describe("Base property", () => {
name: "text",
},
nullable: true,
optional: false,
indexes: [],
relationships: [],
})
Expand All @@ -81,6 +84,98 @@ describe("Base property", () => {
},
defaultValue: "foo",
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
})

test("apply optional modifier", () => {
class StringProperty extends BaseProperty<string> {
protected dataType: PropertyMetadata["dataType"] = {
name: "text",
}
}

const property = new StringProperty().optional()

expectTypeOf(property["$dataType"]).toEqualTypeOf<string | undefined>()
expect(property.parse("username")).toEqual({
fieldName: "username",
dataType: {
name: "text",
},
nullable: false,
optional: true,
indexes: [],
relationships: [],
})
})

test("apply optional and nullable modifier", () => {
class StringProperty extends BaseProperty<string> {
protected dataType: PropertyMetadata["dataType"] = {
name: "text",
}
}

const property = new StringProperty().optional().nullable()
expectTypeOf(property["$dataType"]).toEqualTypeOf<
string | undefined | null
>()
expect(property.parse("username")).toEqual({
fieldName: "username",
dataType: {
name: "text",
},
nullable: true,
optional: true,
indexes: [],
relationships: [],
})
})

test("apply nullable and optional modifier", () => {
class StringProperty extends BaseProperty<string> {
protected dataType: PropertyMetadata["dataType"] = {
name: "text",
}
}

const property = new StringProperty().nullable().optional()
expectTypeOf(property["$dataType"]).toEqualTypeOf<
string | null | undefined
>()
expect(property.parse("username")).toEqual({
fieldName: "username",
dataType: {
name: "text",
},
nullable: true,
optional: true,
indexes: [],
relationships: [],
})
})

test("define default value as a callback", () => {
class StringProperty extends BaseProperty<string> {
protected dataType: PropertyMetadata["dataType"] = {
name: "text",
}
}

const property = new StringProperty().default(() => "22")

expectTypeOf(property["$dataType"]).toEqualTypeOf<string>()
expect(property.parse("username")).toEqual({
fieldName: "username",
dataType: {
name: "text",
},
defaultValue: expect.any(Function),
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ describe("Big Number property", () => {
name: "bigNumber",
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ describe("Boolean property", () => {
name: "boolean",
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ describe("DateTime property", () => {
name: "dateTime",
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand Down
125 changes: 125 additions & 0 deletions packages/core/utils/src/dml/__tests__/entity-builder.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
toMikroOrmEntities,
toMikroORMEntity,
} from "../helpers/create-mikro-orm-entity"
import { InferTypeOf } from "@medusajs/types"

describe("Entity builder", () => {
beforeEach(() => {
Expand Down Expand Up @@ -1447,6 +1448,130 @@ describe("Entity builder", () => {
},
})
})

test("define a property with default runtime value", () => {
const user = model.define("user", {
id: model.number(),
username: model.text().default((schema) => {
const { email } = schema as InferTypeOf<typeof user>
return email.replace(/\@.*/, "")
}),
email: model.text(),
spend_limit: model.bigNumber().default(500.4),
})

const User = toMikroORMEntity(user)
expectTypeOf(new User()).toMatchTypeOf<{
id: number
username: string
email: string
deleted_at: Date | null
}>()

const metaData = MetadataStorage.getMetadataFromDecorator(User)
expect(metaData.className).toEqual("User")
expect(metaData.path).toEqual("User")

expect(metaData.filters).toEqual({
softDeletable: {
name: "softDeletable",
cond: expect.any(Function),
default: true,
args: false,
},
})

expect(metaData.properties).toEqual({
id: {
reference: "scalar",
type: "number",
columnType: "integer",
name: "id",
fieldName: "id",
nullable: false,
getter: false,
setter: false,
},
username: {
reference: "scalar",
type: "string",
default: expect.any(Function),
columnType: "text",
name: "username",
fieldName: "username",
nullable: false,
getter: false,
setter: false,
},
email: {
reference: "scalar",
type: "string",
columnType: "text",
name: "email",
fieldName: "email",
nullable: false,
getter: false,
setter: false,
},
spend_limit: {
columnType: "numeric",
default: 500.4,
getter: true,
name: "spend_limit",
fieldName: "spend_limit",
nullable: false,
reference: "scalar",
setter: true,
trackChanges: false,
type: "any",
},
raw_spend_limit: {
columnType: "jsonb",
getter: false,
name: "raw_spend_limit",
fieldName: "raw_spend_limit",
nullable: false,
reference: "scalar",
setter: false,
type: "any",
},
created_at: {
reference: "scalar",
type: "date",
columnType: "timestamptz",
name: "created_at",
fieldName: "created_at",
defaultRaw: "now()",
onCreate: expect.any(Function),
nullable: false,
getter: false,
setter: false,
},
updated_at: {
reference: "scalar",
type: "date",
columnType: "timestamptz",
name: "updated_at",
fieldName: "updated_at",
defaultRaw: "now()",
onCreate: expect.any(Function),
onUpdate: expect.any(Function),
nullable: false,
getter: false,
setter: false,
},
deleted_at: {
reference: "scalar",
type: "date",
columnType: "timestamptz",
name: "deleted_at",
fieldName: "deleted_at",
nullable: true,
getter: false,
setter: false,
},
})
})
})

describe("Entity builder | id", () => {
Expand Down
4 changes: 4 additions & 0 deletions packages/core/utils/src/dml/__tests__/enum-schema.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ describe("Enum property", () => {
},
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand All @@ -42,6 +43,7 @@ describe("Enum property", () => {
},
},
nullable: true,
optional: false,
indexes: [],
relationships: [],
})
Expand All @@ -66,6 +68,7 @@ describe("Enum property", () => {
},
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand All @@ -90,6 +93,7 @@ describe("Enum property", () => {
},
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand Down
2 changes: 2 additions & 0 deletions packages/core/utils/src/dml/__tests__/id-property.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ describe("Id property", () => {
options: {},
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand All @@ -29,6 +30,7 @@ describe("Id property", () => {
options: {},
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
primaryKey: true,
Expand Down
2 changes: 2 additions & 0 deletions packages/core/utils/src/dml/__tests__/json-property.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ describe("JSON property", () => {
name: "json",
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand All @@ -30,6 +31,7 @@ describe("JSON property", () => {
a: 1,
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ describe("Number property", () => {
options: {},
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand Down
2 changes: 2 additions & 0 deletions packages/core/utils/src/dml/__tests__/text-property.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ describe("Text property", () => {
options: { searchable: false },
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
})
Expand All @@ -29,6 +30,7 @@ describe("Text property", () => {
options: { searchable: false },
},
nullable: false,
optional: false,
indexes: [],
relationships: [],
primaryKey: true,
Expand Down
Loading

0 comments on commit 51c784e

Please sign in to comment.