Skip to content

Commit 801211f

Browse files
authored
Merge pull request #7 from octet-stream/feat/count
2 parents 6853c9f + 4e59526 commit 801211f

File tree

11 files changed

+54
-16
lines changed

11 files changed

+54
-16
lines changed

.changeset/upset-mails-arrive.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"better-auth-mikro-orm": minor
3+
---
4+
5+
Implement count method for adapter

src/adapter.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,13 @@ export function mikroOrmAdapter(orm: MikroORM) {
4444
return normalizeOutput(metadata, entity, select) as any
4545
},
4646

47-
async count(): Promise<number> {
48-
throw new Error("Not implemented yet, and not included in any release")
47+
async count({model, where}): Promise<number> {
48+
const metadata = getEntityMetadata(model)
49+
50+
return orm.em.count(
51+
metadata.class,
52+
normalizeWhereClauses(metadata, where)
53+
)
4954
},
5055

5156
async findOne({model, where, select}) {
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/tests/fixtures/randomUsers.ts renamed to tests/fixtures/randomUsers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {faker} from "@faker-js/faker"
22
import type {MikroORM} from "@mikro-orm/better-sqlite"
33

4-
import type {UserInput} from "../types.js"
4+
import type {UserInput} from "../utils/types.js"
55

66
import {User} from "./entities.js"
77

src/tests/adapter.test.ts renamed to tests/node/adapter.test.ts

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@ import type {
44
} from "better-auth"
55
import {BetterAuthError, generateId} from "better-auth"
66
import {validate} from "uuid"
7-
import {describe, expect, test} from "vitest"
7+
import {expect, suite, test} from "vitest"
88

9-
import {mikroOrmAdapter} from "../index.js"
9+
import {mikroOrmAdapter} from "../../src/index.js"
1010

11-
import {createOrm} from "./fixtures/orm.js"
12-
import {createRandomUsersUtils} from "./fixtures/randomUsers.js"
13-
import type {SessionInput, UserInput} from "./types.js"
11+
import {createOrm} from "../fixtures/orm.js"
12+
import {createRandomUsersUtils} from "../fixtures/randomUsers.js"
13+
import type {SessionInput, UserInput} from "../utils/types.js"
1414

1515
const orm = createOrm()
1616

1717
const randomUsers = createRandomUsersUtils(orm)
1818

1919
const adapter = mikroOrmAdapter(orm)()
2020

21-
describe("create", () => {
21+
suite("create", () => {
2222
test("a new record", async () => {
2323
const expected = randomUsers.createOne()
2424
const actual = await adapter.create<UserInput, DatabaseUser>({
@@ -76,7 +76,36 @@ describe("create", () => {
7676
})
7777
})
7878

79-
describe("findOne", () => {
79+
suite("count", () => {
80+
test("returns the number of total rows in the table", async () => {
81+
const expected = 11
82+
83+
await randomUsers.createAndFlushMany(expected)
84+
85+
const actual = await adapter.count({model: "user"})
86+
87+
expect(actual).toBe(expected)
88+
})
89+
90+
test("supports where clauses", async () => {
91+
const [, , user3, , user5] = await randomUsers.createAndFlushMany(10)
92+
93+
const actual = await adapter.count({
94+
model: "user",
95+
where: [
96+
{
97+
operator: "in",
98+
field: "id",
99+
value: [user3.id, user5.id]
100+
}
101+
]
102+
})
103+
104+
expect(actual).toBe(2)
105+
})
106+
})
107+
108+
suite("findOne", () => {
80109
test("by id", async () => {
81110
const expected = await randomUsers.createAndFlushOne()
82111
const actual = await adapter.findOne<DatabaseUser>({
@@ -138,7 +167,7 @@ describe("findOne", () => {
138167
})
139168
})
140169

141-
describe("findMany", () => {
170+
suite("findMany", () => {
142171
test("returns all records", async () => {
143172
const users = await randomUsers.createAndFlushMany(10)
144173
const actual = await adapter.findMany<DatabaseUser>({
@@ -195,7 +224,7 @@ describe("findMany", () => {
195224
expect(actual.map(({id}) => id)).toEqual([user3.id, user2.id, user1.id])
196225
})
197226

198-
describe("operators", () => {
227+
suite("operators", () => {
199228
test("in", async () => {
200229
const [user1, , user3] = await randomUsers.createAndFlushMany(3)
201230

@@ -215,7 +244,7 @@ describe("findMany", () => {
215244
})
216245
})
217246

218-
describe("errors", () => {
247+
suite("errors", () => {
219248
test("entity not found", async () => {
220249
try {
221250
await adapter.create({
File renamed without changes.

0 commit comments

Comments
 (0)