added format command and added trailing commas to reduce conflicts

This commit is contained in:
dswbx
2025-02-26 20:06:03 +01:00
parent 88b5359f1c
commit 7743f71a11
414 changed files with 3622 additions and 3610 deletions

View File

@@ -6,7 +6,7 @@ describe("[data] Entity", async () => {
new TextField("name", { required: true }),
new TextField("description"),
new NumberField("age", { fillable: false, default_value: 18 }),
new TextField("hidden", { hidden: true, default_value: "secret" })
new TextField("hidden", { hidden: true, default_value: "secret" }),
]);
test("getSelect", async () => {
@@ -17,7 +17,7 @@ describe("[data] Entity", async () => {
expect(entity.getFillableFields().map((f) => f.name)).toEqual([
"name",
"description",
"hidden"
"hidden",
]);
});
@@ -28,7 +28,7 @@ describe("[data] Entity", async () => {
test("getDefaultObject", async () => {
expect(entity.getDefaultObject()).toEqual({
age: 18,
hidden: "secret"
hidden: "secret",
});
});

View File

@@ -4,7 +4,7 @@ import {
EntityManager,
ManyToManyRelation,
ManyToOneRelation,
SchemaManager
SchemaManager,
} from "../../../src/data";
import { UnableToConnectException } from "../../../src/data/errors";
import { getDummyConnection } from "../helper";
@@ -25,7 +25,7 @@ describe("[data] EntityManager", async () => {
expect(await em.ping()).toBe(true);
expect(() => em.entity("...")).toThrow();
expect(() =>
em.addRelation(new ManyToOneRelation(new Entity("1"), new Entity("2")))
em.addRelation(new ManyToOneRelation(new Entity("1"), new Entity("2"))),
).toThrow();
expect(em.schema()).toBeInstanceOf(SchemaManager);
@@ -98,7 +98,7 @@ describe("[data] EntityManager", async () => {
expect(userTargetRel.map((r) => r.other(users).entity.name)).toEqual(["posts", "comments"]);
expect(postTargetRel.map((r) => r.other(posts).entity.name)).toEqual([
"comments",
"categories"
"categories",
]);
expect(commentTargetRel.map((r) => r.other(comments).entity.name)).toEqual([]);
expect(categoriesTargetRel.map((r) => r.other(categories).entity.name)).toEqual(["posts"]);

View File

@@ -12,7 +12,7 @@ describe("[data] JoinBuilder", async () => {
const em = new EntityManager([users], dummyConnection);
expect(() =>
JoinBuilder.addClause(em, em.connection.kysely.selectFrom("users"), users, ["posts"])
JoinBuilder.addClause(em, em.connection.kysely.selectFrom("users"), users, ["posts"]),
).toThrow('Relation "posts" not found');
});
@@ -23,7 +23,7 @@ describe("[data] JoinBuilder", async () => {
const em = new EntityManager([users, posts], dummyConnection, relations);
const qb = JoinBuilder.addClause(em, em.connection.kysely.selectFrom("users"), users, [
"posts"
"posts",
]);
const res = qb.compile();
@@ -34,7 +34,7 @@ describe("[data] JoinBuilder", async () => {
);*/
const qb2 = JoinBuilder.addClause(em, em.connection.kysely.selectFrom("posts"), posts, [
"author"
"author",
]);
const res2 = qb2.compile();

View File

@@ -9,7 +9,7 @@ import {
OneToOneRelation,
type RelationField,
RelationMutator,
TextField
TextField,
} from "../../../src/data";
import * as proto from "../../../src/data/prototype";
import { getDummyConnection } from "../helper";
@@ -22,7 +22,7 @@ describe("[data] Mutator (base)", async () => {
new TextField("label", { required: true }),
new NumberField("count"),
new TextField("hidden", { hidden: true }),
new TextField("not_fillable", { fillable: false })
new TextField("not_fillable", { fillable: false }),
]);
const em = new EntityManager<any>([entity], dummyConnection);
await em.schema().sync({ force: true });
@@ -44,7 +44,7 @@ describe("[data] Mutator (base)", async () => {
test("updateOne", async () => {
const { data } = await em.mutator(entity).insertOne(payload);
const updated = await em.mutator(entity).updateOne(data.id, {
count: 2
count: 2,
});
expect(updated.parameters).toEqual([2, data.id]);
@@ -77,7 +77,7 @@ describe("[data] Mutator (ManyToOne)", async () => {
// persisting relational field should just return key value to be added
expect(
postRelMutator.persistRelationField(postRelField, "users_id", userData.data.id)
postRelMutator.persistRelationField(postRelField, "users_id", userData.data.id),
).resolves.toEqual(["users_id", userData.data.id]);
// persisting invalid value should throw
@@ -86,8 +86,8 @@ describe("[data] Mutator (ManyToOne)", async () => {
// persisting reference should ...
expect(
postRelMutator.persistReference(relations[0]!, "users", {
$set: { id: userData.data.id }
})
$set: { id: userData.data.id },
}),
).resolves.toEqual(["users_id", userData.data.id]);
// @todo: add what methods are allowed to relation, like $create should not be allowed for post<>users
@@ -99,8 +99,8 @@ describe("[data] Mutator (ManyToOne)", async () => {
expect(
em.mutator(posts).insertOne({
title: "post1",
users_id: 100 // user does not exist yet
})
users_id: 100, // user does not exist yet
}),
).rejects.toThrow();
});
@@ -111,7 +111,7 @@ describe("[data] Mutator (ManyToOne)", async () => {
const em = new EntityManager([items, cats], dummyConnection, relations);
expect(em.mutator(items).insertOne({ label: "test" })).rejects.toThrow(
'Field "cats_id" is required'
'Field "cats_id" is required',
);
});
@@ -119,14 +119,14 @@ describe("[data] Mutator (ManyToOne)", async () => {
const { data } = await em.mutator(users).insertOne({ username: "user1" });
const res = await em.mutator(posts).insertOne({
title: "post1",
users_id: data.id
users_id: data.id,
});
expect(res.data.users_id).toBe(data.id);
// setting "null" should be allowed
const res2 = await em.mutator(posts).insertOne({
title: "post1",
users_id: null
users_id: null,
});
expect(res2.data.users_id).toBe(null);
});
@@ -135,14 +135,14 @@ describe("[data] Mutator (ManyToOne)", async () => {
const { data } = await em.mutator(users).insertOne({ username: "user1" });
const res = await em.mutator(posts).insertOne({
title: "post1",
users: { $set: { id: data.id } }
users: { $set: { id: data.id } },
});
expect(res.data.users_id).toBe(data.id);
// setting "null" should be allowed
const res2 = await em.mutator(posts).insertOne({
title: "post1",
users: { $set: { id: null } }
users: { $set: { id: null } },
});
expect(res2.data.users_id).toBe(null);
});
@@ -151,8 +151,8 @@ describe("[data] Mutator (ManyToOne)", async () => {
expect(
em.mutator(posts).insertOne({
title: "test",
users: { $create: { username: "test" } }
})
users: { $create: { username: "test" } },
}),
).rejects.toThrow();
});
@@ -162,27 +162,27 @@ describe("[data] Mutator (ManyToOne)", async () => {
const res2 = await em.mutator(posts).insertOne({ title: "post1" });
const up1 = await em.mutator(posts).updateOne(res2.data.id, {
users: { $set: { id: res1.data.id } }
users: { $set: { id: res1.data.id } },
});
expect(up1.data.users_id).toBe(res1.data.id);
const up2 = await em.mutator(posts).updateOne(res2.data.id, {
users: { $set: { id: res1_1.data.id } }
users: { $set: { id: res1_1.data.id } },
});
expect(up2.data.users_id).toBe(res1_1.data.id);
const up3_1 = await em.mutator(posts).updateOne(res2.data.id, {
users_id: res1.data.id
users_id: res1.data.id,
});
expect(up3_1.data.users_id).toBe(res1.data.id);
const up3_2 = await em.mutator(posts).updateOne(res2.data.id, {
users_id: res1_1.data.id
users_id: res1_1.data.id,
});
expect(up3_2.data.users_id).toBe(res1_1.data.id);
const up4 = await em.mutator(posts).updateOne(res2.data.id, {
users_id: null
users_id: null,
});
expect(up4.data.users_id).toBe(null);
});
@@ -199,8 +199,8 @@ describe("[data] Mutator (OneToOne)", async () => {
expect(
em.mutator(users).insertOne({
username: "test",
settings_id: 1 // todo: throws because it doesn't exist, but it shouldn't be allowed
})
settings_id: 1, // todo: throws because it doesn't exist, but it shouldn't be allowed
}),
).rejects.toThrow();
});
@@ -210,15 +210,15 @@ describe("[data] Mutator (OneToOne)", async () => {
expect(
em.mutator(users).insertOne({
username: "test",
settings: { $set: { id: data.id } }
})
settings: { $set: { id: data.id } },
}),
).rejects.toThrow();
});
test("insertOne: using $create", async () => {
const res = await em.mutator(users).insertOne({
username: "test",
settings: { $create: { theme: "dark" } }
settings: { $create: { theme: "dark" } },
});
expect(res.data.settings_id).toBeDefined();
});
@@ -303,7 +303,7 @@ describe("[data] Mutator (Events)", async () => {
test("insertOne event return is respected", async () => {
const posts = proto.entity("posts", {
title: proto.text(),
views: proto.number()
views: proto.number(),
});
const conn = getDummyConnection();
@@ -318,10 +318,10 @@ describe("[data] Mutator (Events)", async () => {
async (event) => {
return {
...event.params.data,
views: 2
views: 2,
};
},
"sync"
"sync",
);
const mutator = em.mutator("posts");
@@ -329,14 +329,14 @@ describe("[data] Mutator (Events)", async () => {
expect(result.data).toEqual({
id: 1,
title: "test",
views: 2
views: 2,
});
});
test("updateOne event return is respected", async () => {
const posts = proto.entity("posts", {
title: proto.text(),
views: proto.number()
views: proto.number(),
});
const conn = getDummyConnection();
@@ -351,10 +351,10 @@ describe("[data] Mutator (Events)", async () => {
async (event) => {
return {
...event.params.data,
views: event.params.data.views + 1
views: event.params.data.views + 1,
};
},
"sync"
"sync",
);
const mutator = em.mutator("posts");
@@ -363,7 +363,7 @@ describe("[data] Mutator (Events)", async () => {
expect(result.data).toEqual({
id: 1,
title: "test",
views: 3
views: 3,
});
});
});

View File

@@ -7,7 +7,7 @@ import {
LibsqlConnection,
ManyToOneRelation,
RepositoryEvents,
TextField
TextField,
} from "../../../src/data";
import { getDummyConnection } from "../helper";
@@ -70,13 +70,13 @@ describe("[Repository]", async () => {
const q1 = selectQ(conn).compile();
const res = await client.execute({
sql: q1.sql,
args: q1.parameters as any
args: q1.parameters as any,
});
const q2 = countQ(conn).compile();
const count = await client.execute({
sql: q2.sql,
args: q2.parameters as any
args: q2.parameters as any,
});
return [res, count];
}
@@ -93,7 +93,7 @@ describe("[Repository]", async () => {
const exec = async (
name: string,
fn: (em: EntityManager<any>) => Promise<any>,
em: EntityManager<any>
em: EntityManager<any>,
) => {
const res = await Perf.execute(() => fn(em), times);
await sleep(1000);
@@ -102,7 +102,7 @@ describe("[Repository]", async () => {
total: res.total.toFixed(2),
avg: (res.total / times).toFixed(2),
first: res.marks[0].time.toFixed(2),
last: res.marks[res.marks.length - 1].time.toFixed(2)
last: res.marks[res.marks.length - 1].time.toFixed(2),
};
console.log(info.name, info, res.marks);
return info;
@@ -183,7 +183,7 @@ describe("[data] Repository (Events)", async () => {
const items = new Entity("items", [new TextField("label")]);
const categories = new Entity("categories", [new TextField("label")]);
const em = new EntityManager([items, categories], dummyConnection, [
new ManyToOneRelation(categories, items)
new ManyToOneRelation(categories, items),
]);
await em.schema().sync({ force: true });
const events = new Map<string, any>();

View File

@@ -26,7 +26,7 @@ describe("SchemaManager tests", async () => {
isNullable: true,
isAutoIncrementing: true,
hasDefaultValue: false,
comment: undefined
comment: undefined,
},
{
name: "username",
@@ -34,7 +34,7 @@ describe("SchemaManager tests", async () => {
isNullable: true,
isAutoIncrementing: false,
hasDefaultValue: false,
comment: undefined
comment: undefined,
},
{
name: "email",
@@ -42,7 +42,7 @@ describe("SchemaManager tests", async () => {
isNullable: true,
isAutoIncrementing: false,
hasDefaultValue: false,
comment: undefined
comment: undefined,
},
{
name: "bio",
@@ -50,8 +50,8 @@ describe("SchemaManager tests", async () => {
isNullable: true,
isAutoIncrementing: false,
hasDefaultValue: false,
comment: undefined
}
comment: undefined,
},
],
indices: [
{
@@ -61,11 +61,11 @@ describe("SchemaManager tests", async () => {
columns: [
{
name: "email",
order: 0
}
]
}
]
order: 0,
},
],
},
],
});
});
@@ -77,10 +77,10 @@ describe("SchemaManager tests", async () => {
new Entity(table, [
new TextField("username"),
new TextField("email"),
new TextField("bio")
])
new TextField("bio"),
]),
],
dummyConnection
dummyConnection,
);
const kysely = em.connection.kysely;
@@ -101,8 +101,8 @@ describe("SchemaManager tests", async () => {
name: table,
isNew: false,
columns: { add: ["bio"], drop: [], change: [] },
indices: { add: [], drop: [index] }
}
indices: { add: [], drop: [index] },
},
]);
// now sync
@@ -119,7 +119,7 @@ describe("SchemaManager tests", async () => {
const table = "drop_column";
const em = new EntityManager(
[new Entity(table, [new TextField("username")])],
dummyConnection
dummyConnection,
);
const kysely = em.connection.kysely;
@@ -141,10 +141,10 @@ describe("SchemaManager tests", async () => {
columns: {
add: [],
drop: ["email"],
change: []
change: [],
},
indices: { add: [], drop: [] }
}
indices: { add: [], drop: [] },
},
]);
// now sync
@@ -165,15 +165,15 @@ describe("SchemaManager tests", async () => {
new Entity(usersTable, [
new TextField("username"),
new TextField("email"),
new TextField("bio")
new TextField("bio"),
]),
new Entity(postsTable, [
new TextField("title"),
new TextField("content"),
new TextField("created_at")
])
new TextField("created_at"),
]),
],
dummyConnection
dummyConnection,
);
const kysely = em.connection.kysely;
@@ -192,7 +192,7 @@ describe("SchemaManager tests", async () => {
name: usersTable,
isNew: false,
columns: { add: ["bio"], drop: [], change: [] },
indices: { add: [], drop: [] }
indices: { add: [], drop: [] },
},
{
name: postsTable,
@@ -200,10 +200,10 @@ describe("SchemaManager tests", async () => {
columns: {
add: ["id", "title", "content", "created_at"],
drop: [],
change: []
change: [],
},
indices: { add: [], drop: [] }
}
indices: { add: [], drop: [] },
},
]);
// now sync
@@ -228,8 +228,8 @@ describe("SchemaManager tests", async () => {
name: entity.name,
isNew: true,
columns: { add: ["id", "email"], drop: [], change: [] },
indices: { add: [index.name!], drop: [] }
}
indices: { add: [index.name!], drop: [] },
},
]);
// sync and then check again
@@ -256,8 +256,8 @@ describe("SchemaManager tests", async () => {
name: entity.name,
isNew: false,
columns: { add: [], drop: [], change: [] },
indices: { add: [index.name!], drop: [] }
}
indices: { add: [index.name!], drop: [] },
},
]);
// sync and then check again

View File

@@ -7,7 +7,7 @@ import {
ManyToOneRelation,
PolymorphicRelation,
TextField,
WithBuilder
WithBuilder,
} from "../../../src/data";
import * as proto from "../../../src/data/prototype";
import { compileQb, prettyPrintQb, schemaToEm } from "../../helper";
@@ -21,12 +21,12 @@ describe("[data] WithBuilder", async () => {
{
posts: proto.entity("posts", {}),
users: proto.entity("users", {}),
media: proto.entity("media", {})
media: proto.entity("media", {}),
},
({ relation }, { posts, users, media }) => {
relation(posts).manyToOne(users);
relation(users).polyToOne(media, { mappedBy: "avatar" });
}
},
);
const em = schemaToEm(schema);
@@ -36,17 +36,17 @@ describe("[data] WithBuilder", async () => {
expect(
WithBuilder.validateWiths(em, "posts", {
users: {
with: { avatar: {} }
}
})
with: { avatar: {} },
},
}),
).toBe(2);
expect(() => WithBuilder.validateWiths(em, "posts", { author: {} })).toThrow();
expect(() =>
WithBuilder.validateWiths(em, "posts", {
users: {
with: { glibberish: {} }
}
})
with: { glibberish: {} },
},
}),
).toThrow();
});
@@ -56,8 +56,8 @@ describe("[data] WithBuilder", async () => {
expect(() =>
WithBuilder.addClause(em, em.connection.kysely.selectFrom("users"), users, {
posts: {}
})
posts: {},
}),
).toThrow('Relation "users<>posts" not found');
});
@@ -68,13 +68,13 @@ describe("[data] WithBuilder", async () => {
const em = new EntityManager([users, posts], dummyConnection, relations);
const qb = WithBuilder.addClause(em, em.connection.kysely.selectFrom("users"), users, {
posts: {}
posts: {},
});
const res = qb.compile();
expect(res.sql).toBe(
'select (select coalesce(json_group_array(json_object(\'id\', "agg"."id", \'content\', "agg"."content", \'author_id\', "agg"."author_id")), \'[]\') from (select "posts"."id" as "id", "posts"."content" as "content", "posts"."author_id" as "author_id" from "posts" as "posts" where "posts"."author_id" = "users"."id" order by "posts"."id" asc limit ? offset ?) as agg) as "posts" from "users"'
'select (select coalesce(json_group_array(json_object(\'id\', "agg"."id", \'content\', "agg"."content", \'author_id\', "agg"."author_id")), \'[]\') from (select "posts"."id" as "id", "posts"."content" as "content", "posts"."author_id" as "author_id" from "posts" as "posts" where "posts"."author_id" = "users"."id" order by "posts"."id" asc limit ? offset ?) as agg) as "posts" from "users"',
);
expect(res.parameters).toEqual([10, 0]);
@@ -83,14 +83,14 @@ describe("[data] WithBuilder", async () => {
em.connection.kysely.selectFrom("posts"),
posts, // @todo: try with "users", it gives output!
{
author: {}
}
author: {},
},
);
const res2 = qb2.compile();
expect(res2.sql).toBe(
'select (select json_object(\'id\', "obj"."id", \'username\', "obj"."username") from (select "users"."id" as "id", "users"."username" as "username" from "users" as "author" where "author"."id" = "posts"."author_id" order by "users"."id" asc limit ? offset ?) as obj) as "author" from "posts"'
'select (select json_object(\'id\', "obj"."id", \'username\', "obj"."username") from (select "users"."id" as "id", "users"."username" as "username" from "users" as "author" where "author"."id" = "posts"."author_id" order by "users"."id" asc limit ? offset ?) as obj) as "author" from "posts"',
);
expect(res2.parameters).toEqual([1, 0]);
});
@@ -124,7 +124,7 @@ describe("[data] WithBuilder", async () => {
.values([
{ posts_id: 1, categories_id: 1 },
{ posts_id: 2, categories_id: 2 },
{ posts_id: 1, categories_id: 2 }
{ posts_id: 1, categories_id: 2 },
])
.execute();
@@ -138,14 +138,14 @@ describe("[data] WithBuilder", async () => {
title: "fashion post",
categories: [
{ id: 1, label: "fashion" },
{ id: 2, label: "beauty" }
]
{ id: 2, label: "beauty" },
],
},
{
id: 2,
title: "beauty post",
categories: [{ id: 2, label: "beauty" }]
}
categories: [{ id: 2, label: "beauty" }],
},
]);
const res2 = await em.repository(categories).findMany({ with: { posts: {} } });
@@ -156,21 +156,21 @@ describe("[data] WithBuilder", async () => {
{
id: 1,
label: "fashion",
posts: [{ id: 1, title: "fashion post" }]
posts: [{ id: 1, title: "fashion post" }],
},
{
id: 2,
label: "beauty",
posts: [
{ id: 1, title: "fashion post" },
{ id: 2, title: "beauty post" }
]
{ id: 2, title: "beauty post" },
],
},
{
id: 3,
label: "tech",
posts: []
}
posts: [],
},
]);
});
@@ -181,7 +181,7 @@ describe("[data] WithBuilder", async () => {
const entities = [media, categories];
const single = new PolymorphicRelation(categories, media, {
mappedBy: "single",
targetCardinality: 1
targetCardinality: 1,
});
const multiple = new PolymorphicRelation(categories, media, { mappedBy: "multiple" });
@@ -191,11 +191,11 @@ describe("[data] WithBuilder", async () => {
em,
em.connection.kysely.selectFrom("categories"),
categories,
{ single: {} }
{ single: {} },
);
const res = qb.compile();
expect(res.sql).toBe(
'select (select json_object(\'id\', "obj"."id", \'path\', "obj"."path") from (select "media"."id" as "id", "media"."path" as "path" from "media" where "media"."reference" = ? and "categories"."id" = "media"."entity_id" order by "media"."id" asc limit ? offset ?) as obj) as "single" from "categories"'
'select (select json_object(\'id\', "obj"."id", \'path\', "obj"."path") from (select "media"."id" as "id", "media"."path" as "path" from "media" where "media"."reference" = ? and "categories"."id" = "media"."entity_id" order by "media"."id" asc limit ? offset ?) as obj) as "single" from "categories"',
);
expect(res.parameters).toEqual(["categories.single", 1, 0]);
@@ -203,11 +203,11 @@ describe("[data] WithBuilder", async () => {
em,
em.connection.kysely.selectFrom("categories"),
categories,
{ multiple: {} }
{ multiple: {} },
);
const res2 = qb2.compile();
expect(res2.sql).toBe(
'select (select coalesce(json_group_array(json_object(\'id\', "agg"."id", \'path\', "agg"."path")), \'[]\') from (select "media"."id" as "id", "media"."path" as "path" from "media" where "media"."reference" = ? and "categories"."id" = "media"."entity_id" order by "media"."id" asc limit ? offset ?) as agg) as "multiple" from "categories"'
'select (select coalesce(json_group_array(json_object(\'id\', "agg"."id", \'path\', "agg"."path")), \'[]\') from (select "media"."id" as "id", "media"."path" as "path" from "media" where "media"."reference" = ? and "categories"."id" = "media"."entity_id" order by "media"."id" asc limit ? offset ?) as agg) as "multiple" from "categories"',
);
expect(res2.parameters).toEqual(["categories.multiple", 10, 0]);
});
@@ -240,16 +240,16 @@ describe("[data] WithBuilder", async () => {
{
posts: proto.entity("posts", {}),
users: proto.entity("users", {
username: proto.text()
username: proto.text(),
}),
media: proto.entity("media", {
path: proto.text()
})
path: proto.text(),
}),
},
({ relation }, { posts, users, media }) => {
relation(posts).manyToOne(users);
relation(users).polyToOne(media, { mappedBy: "avatar" });
}
},
);
const em = schemaToEm(schema);
@@ -265,16 +265,16 @@ describe("[data] WithBuilder", async () => {
with: {
avatar: {
select: ["id", "path"],
limit: 2 // ignored
}
}
}
}
limit: 2, // ignored
},
},
},
},
);
//prettyPrintQb(qb);
expect(qb.compile().sql).toBe(
'select (select json_object(\'id\', "obj"."id", \'username\', "obj"."username", \'avatar\', "obj"."avatar") from (select "users"."id" as "id", "users"."username" as "username", (select json_object(\'id\', "obj"."id", \'path\', "obj"."path") from (select "media"."id" as "id", "media"."path" as "path" from "media" where "media"."reference" = ? and "users"."id" = "media"."entity_id" order by "media"."id" asc limit ? offset ?) as obj) as "avatar" from "users" as "users" where "users"."id" = "posts"."users_id" order by "users"."username" asc limit ? offset ?) as obj) as "users" from "posts"'
'select (select json_object(\'id\', "obj"."id", \'username\', "obj"."username", \'avatar\', "obj"."avatar") from (select "users"."id" as "id", "users"."username" as "username", (select json_object(\'id\', "obj"."id", \'path\', "obj"."path") from (select "media"."id" as "id", "media"."path" as "path" from "media" where "media"."reference" = ? and "users"."id" = "media"."entity_id" order by "media"."id" asc limit ? offset ?) as obj) as "avatar" from "users" as "users" where "users"."id" = "posts"."users_id" order by "users"."username" asc limit ? offset ?) as obj) as "users" from "posts"',
);
expect(qb.compile().parameters).toEqual(["users.avatar", 1, 0, 1, 0]);
});
@@ -285,17 +285,17 @@ describe("[data] WithBuilder", async () => {
posts: proto.entity("posts", {}),
comments: proto.entity("comments", {}),
users: proto.entity("users", {
username: proto.text()
username: proto.text(),
}),
media: proto.entity("media", {
path: proto.text()
})
path: proto.text(),
}),
},
({ relation }, { posts, comments, users, media }) => {
relation(posts).manyToOne(users).polyToOne(media, { mappedBy: "images" });
relation(users).polyToOne(media, { mappedBy: "avatar" });
relation(comments).manyToOne(posts).manyToOne(users);
}
},
);
const em = schemaToEm(schema);
@@ -308,15 +308,15 @@ describe("[data] WithBuilder", async () => {
limit: 12,
with: {
users: {
select: ["username"]
}
}
}
}
select: ["username"],
},
},
},
},
);
expect(qb.compile().sql).toBe(
'select (select coalesce(json_group_array(json_object(\'id\', "agg"."id", \'posts_id\', "agg"."posts_id", \'users_id\', "agg"."users_id", \'users\', "agg"."users")), \'[]\') from (select "comments"."id" as "id", "comments"."posts_id" as "posts_id", "comments"."users_id" as "users_id", (select json_object(\'username\', "obj"."username") from (select "users"."username" as "username" from "users" as "users" where "users"."id" = "comments"."users_id" order by "users"."id" asc limit ? offset ?) as obj) as "users" from "comments" as "comments" where "comments"."posts_id" = "posts"."id" order by "comments"."id" asc limit ? offset ?) as agg) as "comments" from "posts"'
'select (select coalesce(json_group_array(json_object(\'id\', "agg"."id", \'posts_id\', "agg"."posts_id", \'users_id\', "agg"."users_id", \'users\', "agg"."users")), \'[]\') from (select "comments"."id" as "id", "comments"."posts_id" as "posts_id", "comments"."users_id" as "users_id", (select json_object(\'username\', "obj"."username") from (select "users"."username" as "username" from "users" as "users" where "users"."id" = "comments"."users_id" order by "users"."id" asc limit ? offset ?) as obj) as "users" from "comments" as "comments" where "comments"."posts_id" = "posts"."id" order by "comments"."id" asc limit ? offset ?) as agg) as "comments" from "posts"',
);
expect(qb.compile().parameters).toEqual([1, 0, 12, 0]);
});
@@ -325,23 +325,23 @@ describe("[data] WithBuilder", async () => {
const schema = proto.em(
{
posts: proto.entity("posts", {
title: proto.text()
title: proto.text(),
}),
comments: proto.entity("comments", {
content: proto.text()
content: proto.text(),
}),
users: proto.entity("users", {
username: proto.text()
username: proto.text(),
}),
media: proto.entity("media", {
path: proto.text()
})
path: proto.text(),
}),
},
({ relation }, { posts, comments, users, media }) => {
relation(posts).manyToOne(users).polyToOne(media, { mappedBy: "images" });
relation(users).polyToOne(media, { mappedBy: "avatar" });
relation(comments).manyToOne(posts).manyToOne(users);
}
},
);
const em = schemaToEm(schema);
await em.schema().sync({ force: true });
@@ -351,7 +351,7 @@ describe("[data] WithBuilder", async () => {
await em.mutator("posts").insertMany([
{ title: "post1", users_id: 1 },
{ title: "post2", users_id: 1 },
{ title: "post3", users_id: 2 }
{ title: "post3", users_id: 2 },
]);
await em.mutator("comments").insertMany([
{ content: "comment1", posts_id: 1, users_id: 1 },
@@ -360,7 +360,7 @@ describe("[data] WithBuilder", async () => {
{ content: "comment3", posts_id: 2, users_id: 1 },
{ content: "comment4", posts_id: 2, users_id: 2 },
{ content: "comment5", posts_id: 3, users_id: 1 },
{ content: "comment6", posts_id: 3, users_id: 2 }
{ content: "comment6", posts_id: 3, users_id: 2 },
]);
const result = await em.repo("posts").findMany({
@@ -371,11 +371,11 @@ describe("[data] WithBuilder", async () => {
select: ["content"],
with: {
users: {
select: ["username"]
}
}
}
}
select: ["username"],
},
},
},
},
});
expect(result.data).toEqual([
@@ -385,16 +385,16 @@ describe("[data] WithBuilder", async () => {
{
content: "comment1",
users: {
username: "user1"
}
username: "user1",
},
},
{
content: "comment1-1",
users: {
username: "user1"
}
}
]
username: "user1",
},
},
],
},
{
title: "post2",
@@ -402,16 +402,16 @@ describe("[data] WithBuilder", async () => {
{
content: "comment3",
users: {
username: "user1"
}
username: "user1",
},
},
{
content: "comment4",
users: {
username: "user2"
}
}
]
username: "user2",
},
},
],
},
{
title: "post3",
@@ -419,17 +419,17 @@ describe("[data] WithBuilder", async () => {
{
content: "comment5",
users: {
username: "user1"
}
username: "user1",
},
},
{
content: "comment6",
users: {
username: "user2"
}
}
]
}
username: "user2",
},
},
],
},
]);
//console.log(_jsonp(result.data));
});

View File

@@ -22,10 +22,10 @@ describe("Connection", async () => {
columns: [
{
name: "name",
order: 0
}
]
}
order: 0,
},
],
},
]);
});
@@ -54,14 +54,14 @@ describe("Connection", async () => {
columns: [
{
name: "name",
order: 0
order: 0,
},
{
name: "desc",
order: 1
}
]
}
order: 1,
},
],
},
]);
});
@@ -83,10 +83,10 @@ describe("Connection", async () => {
columns: [
{
name: "name",
order: 0
}
]
}
order: 0,
},
],
},
]);
});
});

View File

@@ -10,12 +10,12 @@ describe("[data] EnumField", async () => {
runBaseFieldTests(
EnumField,
{ defaultValue: "a", schemaType: "text" },
{ options: options(["a", "b", "c"]) }
{ options: options(["a", "b", "c"]) },
);
test("yields if default value is not a valid option", async () => {
expect(
() => new EnumField("test", { options: options(["a", "b"]), default_value: "c" })
() => new EnumField("test", { options: options(["a", "b"]), default_value: "c" }),
).toThrow();
});
@@ -31,7 +31,7 @@ describe("[data] EnumField", async () => {
const field = new EnumField("test", {
options: options(["a", "b", "c"]),
default_value: "a",
required: true
required: true,
});
expect(field.transformRetrieve(null)).toBe("a");

View File

@@ -24,20 +24,20 @@ describe("[data] Field", async () => {
const required = new FieldSpec("test", { required: true });
const requiredDefault = new FieldSpec("test", {
required: true,
default_value: "test"
default_value: "test",
});
expect(required.transformPersist(null, undefined as any, undefined as any)).rejects.toThrow();
expect(
required.transformPersist(undefined, undefined as any, undefined as any)
required.transformPersist(undefined, undefined as any, undefined as any),
).rejects.toThrow();
// works because it has a default value
expect(
requiredDefault.transformPersist(null, undefined as any, undefined as any)
requiredDefault.transformPersist(null, undefined as any, undefined as any),
).resolves.toBeDefined();
expect(
requiredDefault.transformPersist(undefined, undefined as any, undefined as any)
requiredDefault.transformPersist(undefined, undefined as any, undefined as any),
).resolves.toBeDefined();
});
});

View File

@@ -5,7 +5,7 @@ import {
EntityIndex,
type EntityManager,
Field,
type SchemaResponse
type SchemaResponse,
} from "../../../../src/data";
class TestField extends Field {

View File

@@ -7,7 +7,7 @@ describe("[data] JsonField", async () => {
runBaseFieldTests(JsonField, {
defaultValue: { a: 1 },
sampleValues: ["string", { test: 1 }, 1],
schemaType: "text"
schemaType: "text",
});
test("transformPersist (no config)", async () => {

View File

@@ -18,7 +18,7 @@ export function transformPersist(field: Field, value: any, context?: TActionCont
export function runBaseFieldTests(
fieldClass: ConstructableField,
config: FieldTestConfig,
_requiredConfig: any = {}
_requiredConfig: any = {},
) {
const noConfigField = new fieldClass("no_config", _requiredConfig);
const fillable = new fieldClass("fillable", { ..._requiredConfig, fillable: true });
@@ -29,7 +29,7 @@ export function runBaseFieldTests(
..._requiredConfig,
fillable: true,
required: true,
default_value: config.defaultValue
default_value: config.defaultValue,
});
test("schema", () => {
@@ -37,7 +37,7 @@ export function runBaseFieldTests(
expect(noConfigField.schema(null as any)).toEqual([
"no_config",
config.schemaType,
expect.any(Function)
expect.any(Function),
]);
});
@@ -96,7 +96,7 @@ export function runBaseFieldTests(
//order: 1,
fillable: true,
required: false,
hidden: false
hidden: false,
//virtual: false,
//default_value: undefined
};
@@ -105,20 +105,20 @@ export function runBaseFieldTests(
const json = field.toJSON();
return {
...json,
config: omit(json.config, ["html"])
config: omit(json.config, ["html"]),
};
}
expect(fieldJson(noConfigField)).toEqual({
//name: "no_config",
type: noConfigField.type,
config: _config
config: _config,
});
expect(fieldJson(fillable)).toEqual({
//name: "fillable",
type: noConfigField.type,
config: _config
config: _config,
});
expect(fieldJson(required)).toEqual({
@@ -126,8 +126,8 @@ export function runBaseFieldTests(
type: required.type,
config: {
..._config,
required: true
}
required: true,
},
});
expect(fieldJson(hidden)).toEqual({
@@ -135,8 +135,8 @@ export function runBaseFieldTests(
type: required.type,
config: {
..._config,
hidden: true
}
hidden: true,
},
});
expect(fieldJson(dflt)).toEqual({
@@ -144,8 +144,8 @@ export function runBaseFieldTests(
type: dflt.type,
config: {
..._config,
default_value: config.defaultValue
}
default_value: config.defaultValue,
},
});
expect(fieldJson(requiredAndDefault)).toEqual({
@@ -155,8 +155,8 @@ export function runBaseFieldTests(
..._config,
fillable: true,
required: true,
default_value: config.defaultValue
}
default_value: config.defaultValue,
},
});
});
}

View File

@@ -4,7 +4,7 @@ import {
type BaseRelationConfig,
EntityRelation,
EntityRelationAnchor,
RelationTypes
RelationTypes,
} from "../../../../src/data/relations";
class TestEntityRelation extends EntityRelation {
@@ -12,7 +12,7 @@ class TestEntityRelation extends EntityRelation {
super(
new EntityRelationAnchor(new Entity("source"), "source"),
new EntityRelationAnchor(new Entity("target"), "target"),
config
config,
);
}
initialize(em: EntityManager<any>) {}