better-auth 1.2.6-beta.7 → 1.2.7-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/dist/adapters/drizzle-adapter/index.cjs +186 -249
  2. package/dist/adapters/drizzle-adapter/index.d.cts +11 -49
  3. package/dist/adapters/drizzle-adapter/index.d.mts +11 -49
  4. package/dist/adapters/drizzle-adapter/index.d.ts +11 -49
  5. package/dist/adapters/drizzle-adapter/index.mjs +186 -249
  6. package/dist/adapters/index.cjs +26 -0
  7. package/dist/adapters/index.d.cts +17 -0
  8. package/dist/adapters/index.d.mts +17 -0
  9. package/dist/adapters/index.d.ts +17 -0
  10. package/dist/adapters/index.mjs +20 -0
  11. package/dist/adapters/kysely-adapter/index.cjs +7 -7
  12. package/dist/adapters/kysely-adapter/index.d.cts +17 -49
  13. package/dist/adapters/kysely-adapter/index.d.mts +17 -49
  14. package/dist/adapters/kysely-adapter/index.d.ts +17 -49
  15. package/dist/adapters/kysely-adapter/index.mjs +8 -8
  16. package/dist/adapters/memory-adapter/index.cjs +7 -8
  17. package/dist/adapters/memory-adapter/index.d.cts +9 -49
  18. package/dist/adapters/memory-adapter/index.d.mts +9 -49
  19. package/dist/adapters/memory-adapter/index.d.ts +9 -49
  20. package/dist/adapters/memory-adapter/index.mjs +8 -9
  21. package/dist/adapters/mongodb-adapter/index.cjs +2 -2
  22. package/dist/adapters/mongodb-adapter/index.d.cts +4 -4
  23. package/dist/adapters/mongodb-adapter/index.d.mts +4 -4
  24. package/dist/adapters/mongodb-adapter/index.d.ts +4 -4
  25. package/dist/adapters/mongodb-adapter/index.mjs +3 -3
  26. package/dist/adapters/prisma-adapter/index.cjs +130 -203
  27. package/dist/adapters/prisma-adapter/index.d.cts +17 -49
  28. package/dist/adapters/prisma-adapter/index.d.mts +17 -49
  29. package/dist/adapters/prisma-adapter/index.d.ts +17 -49
  30. package/dist/adapters/prisma-adapter/index.mjs +131 -204
  31. package/dist/adapters/test.cjs +710 -377
  32. package/dist/adapters/test.d.cts +64 -5
  33. package/dist/adapters/test.d.mts +64 -5
  34. package/dist/adapters/test.d.ts +64 -5
  35. package/dist/adapters/test.mjs +712 -380
  36. package/dist/api/index.cjs +61 -25
  37. package/dist/api/index.d.cts +3 -3
  38. package/dist/api/index.d.mts +3 -3
  39. package/dist/api/index.d.ts +3 -3
  40. package/dist/api/index.mjs +63 -27
  41. package/dist/client/index.d.cts +3 -3
  42. package/dist/client/index.d.mts +3 -3
  43. package/dist/client/index.d.ts +3 -3
  44. package/dist/client/plugins/index.cjs +13 -15
  45. package/dist/client/plugins/index.d.cts +80 -19
  46. package/dist/client/plugins/index.d.mts +80 -19
  47. package/dist/client/plugins/index.d.ts +80 -19
  48. package/dist/client/plugins/index.mjs +13 -16
  49. package/dist/client/react/index.cjs +4 -4
  50. package/dist/client/react/index.d.cts +3 -3
  51. package/dist/client/react/index.d.mts +3 -3
  52. package/dist/client/react/index.d.ts +3 -3
  53. package/dist/client/solid/index.d.cts +3 -3
  54. package/dist/client/solid/index.d.mts +3 -3
  55. package/dist/client/solid/index.d.ts +3 -3
  56. package/dist/client/svelte/index.d.cts +3 -3
  57. package/dist/client/svelte/index.d.mts +3 -3
  58. package/dist/client/svelte/index.d.ts +3 -3
  59. package/dist/client/vue/index.d.cts +3 -3
  60. package/dist/client/vue/index.d.mts +3 -3
  61. package/dist/client/vue/index.d.ts +3 -3
  62. package/dist/cookies/index.cjs +13 -2
  63. package/dist/cookies/index.d.cts +3 -3
  64. package/dist/cookies/index.d.mts +3 -3
  65. package/dist/cookies/index.d.ts +3 -3
  66. package/dist/cookies/index.mjs +13 -2
  67. package/dist/db/index.cjs +6 -5
  68. package/dist/db/index.d.cts +4 -4
  69. package/dist/db/index.d.mts +4 -4
  70. package/dist/db/index.d.ts +4 -4
  71. package/dist/db/index.mjs +7 -6
  72. package/dist/index.cjs +11 -7
  73. package/dist/index.d.cts +4 -4
  74. package/dist/index.d.mts +4 -4
  75. package/dist/index.d.ts +4 -4
  76. package/dist/index.mjs +14 -10
  77. package/dist/integrations/next-js.cjs +4 -5
  78. package/dist/integrations/next-js.d.cts +3 -3
  79. package/dist/integrations/next-js.d.mts +3 -3
  80. package/dist/integrations/next-js.d.ts +3 -3
  81. package/dist/integrations/next-js.mjs +5 -6
  82. package/dist/integrations/node.d.cts +3 -3
  83. package/dist/integrations/node.d.mts +3 -3
  84. package/dist/integrations/node.d.ts +3 -3
  85. package/dist/integrations/react-start.cjs +5 -6
  86. package/dist/integrations/react-start.d.cts +3 -3
  87. package/dist/integrations/react-start.d.mts +3 -3
  88. package/dist/integrations/react-start.d.ts +3 -3
  89. package/dist/integrations/react-start.mjs +6 -7
  90. package/dist/integrations/svelte-kit.d.cts +3 -3
  91. package/dist/integrations/svelte-kit.d.mts +3 -3
  92. package/dist/integrations/svelte-kit.d.ts +3 -3
  93. package/dist/oauth2/index.d.cts +5 -5
  94. package/dist/oauth2/index.d.mts +5 -5
  95. package/dist/oauth2/index.d.ts +5 -5
  96. package/dist/plugins/access/index.d.cts +1 -1
  97. package/dist/plugins/access/index.d.mts +1 -1
  98. package/dist/plugins/access/index.d.ts +1 -1
  99. package/dist/plugins/admin/access/index.d.cts +1 -1
  100. package/dist/plugins/admin/access/index.d.mts +1 -1
  101. package/dist/plugins/admin/access/index.d.ts +1 -1
  102. package/dist/plugins/admin/index.cjs +4 -4
  103. package/dist/plugins/admin/index.d.cts +74 -14
  104. package/dist/plugins/admin/index.d.mts +74 -14
  105. package/dist/plugins/admin/index.d.ts +74 -14
  106. package/dist/plugins/admin/index.mjs +5 -5
  107. package/dist/plugins/anonymous/index.cjs +4 -5
  108. package/dist/plugins/anonymous/index.d.cts +3 -3
  109. package/dist/plugins/anonymous/index.d.mts +3 -3
  110. package/dist/plugins/anonymous/index.d.ts +3 -3
  111. package/dist/plugins/anonymous/index.mjs +5 -6
  112. package/dist/plugins/bearer/index.cjs +2 -2
  113. package/dist/plugins/bearer/index.d.cts +3 -3
  114. package/dist/plugins/bearer/index.d.mts +3 -3
  115. package/dist/plugins/bearer/index.d.ts +3 -3
  116. package/dist/plugins/bearer/index.mjs +3 -3
  117. package/dist/plugins/captcha/index.cjs +110 -45
  118. package/dist/plugins/captcha/index.d.cts +26 -6
  119. package/dist/plugins/captcha/index.d.mts +26 -6
  120. package/dist/plugins/captcha/index.d.ts +26 -6
  121. package/dist/plugins/captcha/index.mjs +110 -45
  122. package/dist/plugins/custom-session/index.cjs +24 -5
  123. package/dist/plugins/custom-session/index.d.cts +25 -6
  124. package/dist/plugins/custom-session/index.d.mts +25 -6
  125. package/dist/plugins/custom-session/index.d.ts +25 -6
  126. package/dist/plugins/custom-session/index.mjs +25 -6
  127. package/dist/plugins/email-otp/index.cjs +96 -30
  128. package/dist/plugins/email-otp/index.d.cts +33 -10
  129. package/dist/plugins/email-otp/index.d.mts +33 -10
  130. package/dist/plugins/email-otp/index.d.ts +33 -10
  131. package/dist/plugins/email-otp/index.mjs +97 -31
  132. package/dist/plugins/generic-oauth/index.cjs +81 -20
  133. package/dist/plugins/generic-oauth/index.d.cts +46 -3
  134. package/dist/plugins/generic-oauth/index.d.mts +46 -3
  135. package/dist/plugins/generic-oauth/index.d.ts +46 -3
  136. package/dist/plugins/generic-oauth/index.mjs +82 -21
  137. package/dist/plugins/haveibeenpwned/index.cjs +98 -0
  138. package/dist/plugins/haveibeenpwned/index.d.cts +36 -0
  139. package/dist/plugins/haveibeenpwned/index.d.mts +36 -0
  140. package/dist/plugins/haveibeenpwned/index.d.ts +36 -0
  141. package/dist/plugins/haveibeenpwned/index.mjs +96 -0
  142. package/dist/plugins/index.cjs +583 -19
  143. package/dist/plugins/index.d.cts +7 -5
  144. package/dist/plugins/index.d.mts +7 -5
  145. package/dist/plugins/index.d.ts +7 -5
  146. package/dist/plugins/index.mjs +583 -21
  147. package/dist/plugins/jwt/index.cjs +45 -21
  148. package/dist/plugins/jwt/index.d.cts +52 -6
  149. package/dist/plugins/jwt/index.d.mts +52 -6
  150. package/dist/plugins/jwt/index.d.ts +52 -6
  151. package/dist/plugins/jwt/index.mjs +46 -22
  152. package/dist/plugins/magic-link/index.cjs +3 -3
  153. package/dist/plugins/magic-link/index.mjs +4 -4
  154. package/dist/plugins/multi-session/index.cjs +3 -3
  155. package/dist/plugins/multi-session/index.d.cts +3 -3
  156. package/dist/plugins/multi-session/index.d.mts +3 -3
  157. package/dist/plugins/multi-session/index.d.ts +3 -3
  158. package/dist/plugins/multi-session/index.mjs +4 -4
  159. package/dist/plugins/oauth-proxy/index.cjs +4 -4
  160. package/dist/plugins/oauth-proxy/index.d.cts +3 -3
  161. package/dist/plugins/oauth-proxy/index.d.mts +3 -3
  162. package/dist/plugins/oauth-proxy/index.d.ts +3 -3
  163. package/dist/plugins/oauth-proxy/index.mjs +5 -5
  164. package/dist/plugins/oidc-provider/index.cjs +227 -8
  165. package/dist/plugins/oidc-provider/index.d.cts +215 -3
  166. package/dist/plugins/oidc-provider/index.d.mts +215 -3
  167. package/dist/plugins/oidc-provider/index.d.ts +215 -3
  168. package/dist/plugins/oidc-provider/index.mjs +228 -9
  169. package/dist/plugins/one-tap/index.cjs +5 -5
  170. package/dist/plugins/one-tap/index.mjs +6 -6
  171. package/dist/plugins/one-time-token/index.cjs +119 -0
  172. package/dist/plugins/one-time-token/index.d.cts +134 -0
  173. package/dist/plugins/one-time-token/index.d.mts +134 -0
  174. package/dist/plugins/one-time-token/index.d.ts +134 -0
  175. package/dist/plugins/one-time-token/index.mjs +117 -0
  176. package/dist/plugins/open-api/index.cjs +3 -3
  177. package/dist/plugins/open-api/index.d.cts +3 -3
  178. package/dist/plugins/open-api/index.d.mts +3 -3
  179. package/dist/plugins/open-api/index.d.ts +3 -3
  180. package/dist/plugins/open-api/index.mjs +4 -4
  181. package/dist/plugins/organization/access/index.d.cts +1 -1
  182. package/dist/plugins/organization/access/index.d.mts +1 -1
  183. package/dist/plugins/organization/access/index.d.ts +1 -1
  184. package/dist/plugins/organization/index.cjs +4 -4
  185. package/dist/plugins/organization/index.d.cts +708 -55
  186. package/dist/plugins/organization/index.d.mts +708 -55
  187. package/dist/plugins/organization/index.d.ts +708 -55
  188. package/dist/plugins/organization/index.mjs +5 -5
  189. package/dist/plugins/passkey/index.cjs +82 -8
  190. package/dist/plugins/passkey/index.d.cts +72 -3
  191. package/dist/plugins/passkey/index.d.mts +72 -3
  192. package/dist/plugins/passkey/index.d.ts +72 -3
  193. package/dist/plugins/passkey/index.mjs +83 -9
  194. package/dist/plugins/phone-number/index.cjs +194 -26
  195. package/dist/plugins/phone-number/index.d.cts +132 -8
  196. package/dist/plugins/phone-number/index.d.mts +132 -8
  197. package/dist/plugins/phone-number/index.d.ts +132 -8
  198. package/dist/plugins/phone-number/index.mjs +195 -27
  199. package/dist/plugins/sso/index.cjs +190 -7
  200. package/dist/plugins/sso/index.d.cts +181 -15
  201. package/dist/plugins/sso/index.d.mts +181 -15
  202. package/dist/plugins/sso/index.d.ts +181 -15
  203. package/dist/plugins/sso/index.mjs +191 -8
  204. package/dist/plugins/two-factor/index.cjs +443 -92
  205. package/dist/plugins/two-factor/index.d.cts +230 -396
  206. package/dist/plugins/two-factor/index.d.mts +230 -396
  207. package/dist/plugins/two-factor/index.d.ts +230 -396
  208. package/dist/plugins/two-factor/index.mjs +431 -80
  209. package/dist/plugins/username/index.cjs +34 -31
  210. package/dist/plugins/username/index.d.cts +15 -12
  211. package/dist/plugins/username/index.d.mts +15 -12
  212. package/dist/plugins/username/index.d.ts +15 -12
  213. package/dist/plugins/username/index.mjs +35 -32
  214. package/dist/shared/better-auth.1DR6suCQ.mjs +307 -0
  215. package/dist/shared/{better-auth.BSsp73pg.cjs → better-auth.B7cZ2juS.cjs} +15 -14
  216. package/dist/shared/{better-auth.bKwabe3I.d.mts → better-auth.B88xucNq.d.mts} +529 -39
  217. package/dist/shared/{better-auth.CApEjVDP.cjs → better-auth.BW8BpneG.cjs} +4 -1
  218. package/dist/shared/{better-auth.BiQsvaIP.d.cts → better-auth.BcU1Kjyq.d.cts} +2051 -518
  219. package/dist/shared/better-auth.BfG24BjZ.cjs +118 -0
  220. package/dist/shared/{better-auth.A3TjrU8G.mjs → better-auth.Bk5IMdhM.mjs} +32 -12
  221. package/dist/shared/{better-auth.D9VnBkRI.mjs → better-auth.Bm9HxIzE.mjs} +47 -24
  222. package/dist/shared/{better-auth.BRf6Iynu.d.ts → better-auth.Bwc-6kOr.d.ts} +1 -1
  223. package/dist/shared/{better-auth.D-oLmHIj.d.mts → better-auth.CA2hFK4N.d.ts} +2051 -518
  224. package/dist/shared/{better-auth.Dmhe30iW.d.mts → better-auth.CGukGrxT.d.cts} +1 -1
  225. package/dist/shared/{better-auth.CsSpq0zL.cjs → better-auth.CHUzBidy.cjs} +46 -23
  226. package/dist/shared/{better-auth.DWRligF8.d.cts → better-auth.CT9J6rD-.d.cts} +539 -7
  227. package/dist/shared/better-auth.CVCo5Z2T.cjs +310 -0
  228. package/dist/shared/{better-auth.D4jH-sJA.mjs → better-auth.CWwVo_61.mjs} +458 -118
  229. package/dist/shared/{better-auth.Bi8FQwDD.d.cts → better-auth.CYegVoq1.d.cts} +1 -1
  230. package/dist/shared/{better-auth.Bi8FQwDD.d.mts → better-auth.CYegVoq1.d.mts} +1 -1
  231. package/dist/shared/{better-auth.Bi8FQwDD.d.ts → better-auth.CYegVoq1.d.ts} +1 -1
  232. package/dist/shared/{better-auth.CepcSj5H.mjs → better-auth.Cc72UxUH.mjs} +1 -2
  233. package/dist/shared/{better-auth.BWp5dztg.d.ts → better-auth.CmN4mlPh.d.ts} +539 -7
  234. package/dist/shared/{better-auth.DH3YjMQH.mjs → better-auth.Cqykj82J.mjs} +1 -1
  235. package/dist/shared/{better-auth.wcdMj2cT.d.mts → better-auth.DIt2e3lu.d.mts} +539 -7
  236. package/dist/shared/{better-auth.BANAxdkL.d.ts → better-auth.DNTAFSt1.d.ts} +529 -39
  237. package/dist/shared/{better-auth.DU2QNVc_.d.ts → better-auth.DQ7OSJbI.d.mts} +2051 -518
  238. package/dist/shared/{better-auth.DLTzKoOS.cjs → better-auth.DSVbLSt7.cjs} +4 -1
  239. package/dist/shared/{better-auth.B2Fw1vhH.d.cts → better-auth.DTiSPWEk.d.cts} +529 -39
  240. package/dist/shared/better-auth.DURsStt9.mjs +116 -0
  241. package/dist/shared/{better-auth.BIjcZ_vt.cjs → better-auth.DYoLD99C.cjs} +31 -11
  242. package/dist/shared/{better-auth.CV1L7TPV.cjs → better-auth.D_ZIX1O8.cjs} +317 -47
  243. package/dist/shared/{better-auth.C5H9XEzZ.cjs → better-auth.DcWKCjjf.cjs} +1 -2
  244. package/dist/shared/{better-auth.BDYXUcLv.cjs → better-auth.Dg0siV5C.cjs} +457 -117
  245. package/dist/shared/better-auth.DjryM8pE.cjs +760 -0
  246. package/dist/shared/{better-auth.DPBQN9Fs.mjs → better-auth.Dn_Ms1Uf.mjs} +318 -48
  247. package/dist/shared/{better-auth.DiG4KL2x.mjs → better-auth.OuYYTHC7.mjs} +4 -1
  248. package/dist/shared/{better-auth.DtC8i3pf.d.cts → better-auth.S1jimRbX.d.mts} +1 -1
  249. package/dist/shared/better-auth.SPmq4a4z.d.mts +344 -0
  250. package/dist/shared/{better-auth.cOCrlspr.mjs → better-auth.bkwPl2G4.mjs} +4 -1
  251. package/dist/shared/better-auth.cp2rC2iM.d.ts +344 -0
  252. package/dist/shared/better-auth.eVy4DZvP.d.cts +344 -0
  253. package/dist/shared/{better-auth.BrOpzmqo.mjs → better-auth.iKoUsdFE.mjs} +15 -14
  254. package/dist/shared/better-auth.rSYJCd3o.mjs +758 -0
  255. package/dist/social-providers/index.cjs +75 -3
  256. package/dist/social-providers/index.d.cts +2 -2
  257. package/dist/social-providers/index.d.mts +2 -2
  258. package/dist/social-providers/index.d.ts +2 -2
  259. package/dist/social-providers/index.mjs +77 -6
  260. package/dist/types/index.d.cts +4 -4
  261. package/dist/types/index.d.mts +4 -4
  262. package/dist/types/index.d.ts +4 -4
  263. package/package.json +42 -5
  264. package/dist/chunks/server.cjs +0 -905
  265. package/dist/chunks/server.mjs +0 -895
  266. package/dist/shared/better-auth.BcoSd9tC.mjs +0 -10
  267. package/dist/shared/better-auth.BnRFp-t0.mjs +0 -405
  268. package/dist/shared/better-auth.C1-vpKly.cjs +0 -12
  269. package/dist/shared/better-auth.ClTSOgiD.mjs +0 -140
  270. package/dist/shared/better-auth.DC8JQbiE.mjs +0 -173
  271. package/dist/shared/better-auth.DWHWPllD.cjs +0 -175
  272. package/dist/shared/better-auth.DqLjzBlO.cjs +0 -408
  273. package/dist/shared/better-auth.m575EIBC.cjs +0 -144
@@ -1,4 +1,4 @@
1
- import { test, expect } from 'vitest';
1
+ import { describe, test, expect, beforeAll } from 'vitest';
2
2
  import { g as generateId } from '../shared/better-auth.BUPPRXfK.mjs';
3
3
  import 'zod';
4
4
  import 'better-call';
@@ -13,417 +13,660 @@ import '@better-auth/utils';
13
13
  import '@better-auth/utils/hex';
14
14
  import '@noble/hashes/utils';
15
15
  import '../shared/better-auth.B4Qoxdgc.mjs';
16
- import '../shared/better-auth.DH3YjMQH.mjs';
16
+ import '../shared/better-auth.Cqykj82J.mjs';
17
17
  import '@better-auth/utils/random';
18
18
 
19
- async function runAdapterTest(opts) {
20
- const adapter = await opts.getAdapter();
19
+ const adapterTests = {
20
+ CREATE_MODEL: "create model",
21
+ CREATE_MODEL_SHOULD_ALWAYS_RETURN_AN_ID: "create model should always return an id",
22
+ FIND_MODEL: "find model",
23
+ FIND_MODEL_WITHOUT_ID: "find model without id",
24
+ FIND_MODEL_WITH_SELECT: "find model with select",
25
+ FIND_MODEL_WITH_MODIFIED_FIELD_NAME: "find model with modified field name",
26
+ UPDATE_MODEL: "update model",
27
+ SHOULD_FIND_MANY: "should find many",
28
+ SHOULD_FIND_MANY_WITH_WHERE: "should find many with where",
29
+ SHOULD_FIND_MANY_WITH_OPERATORS: "should find many with operators",
30
+ SHOULD_WORK_WITH_REFERENCE_FIELDS: "should work with reference fields",
31
+ SHOULD_FIND_MANY_WITH_SORT_BY: "should find many with sortBy",
32
+ SHOULD_FIND_MANY_WITH_LIMIT: "should find many with limit",
33
+ SHOULD_FIND_MANY_WITH_OFFSET: "should find many with offset",
34
+ SHOULD_UPDATE_WITH_MULTIPLE_WHERE: "should update with multiple where",
35
+ DELETE_MODEL: "delete model",
36
+ SHOULD_DELETE_MANY: "should delete many",
37
+ SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND: "shouldn't throw on delete record not found",
38
+ SHOULD_NOT_THROW_ON_RECORD_NOT_FOUND: "shouldn't throw on record not found",
39
+ SHOULD_FIND_MANY_WITH_CONTAINS_OPERATOR: "should find many with contains operator",
40
+ SHOULD_SEARCH_USERS_WITH_STARTS_WITH: "should search users with startsWith",
41
+ SHOULD_SEARCH_USERS_WITH_ENDS_WITH: "should search users with endsWith",
42
+ SHOULD_PREFER_GENERATE_ID_IF_PROVIDED: "should prefer generateId if provided"
43
+ };
44
+ const { ...numberIdAdapterTestsCopy } = adapterTests;
45
+ const numberIdAdapterTests = {
46
+ ...numberIdAdapterTestsCopy,
47
+ SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT: "Should return a number id as a result",
48
+ SHOULD_INCREMENT_THE_ID_BY_1: "Should increment the id by 1"
49
+ };
50
+ delete numberIdAdapterTests.SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND;
51
+ async function adapterTest({ getAdapter, disableTests: disabledTests, testPrefix }, internalOptions) {
52
+ const adapter = async () => await getAdapter(internalOptions?.predefinedOptions);
53
+ async function resetDebugLogs() {
54
+ (await adapter())?.adapterTestDebugLogs?.resetDebugLogs();
55
+ }
56
+ async function printDebugLogs() {
57
+ (await adapter())?.adapterTestDebugLogs?.printDebugLogs();
58
+ }
21
59
  const user = {
22
- id: "1",
23
60
  name: "user",
24
61
  email: "user@email.com",
25
62
  emailVerified: true,
26
63
  createdAt: /* @__PURE__ */ new Date(),
27
64
  updatedAt: /* @__PURE__ */ new Date()
28
65
  };
29
- test("create model", async () => {
30
- const res = await adapter.create({
31
- model: "user",
32
- data: user
33
- });
34
- expect({
35
- name: res.name,
36
- email: res.email
37
- }).toEqual({
38
- name: user.name,
39
- email: user.email
40
- });
41
- user.id = res.id;
42
- });
43
- test("find model", async () => {
44
- const res = await adapter.findOne({
45
- model: "user",
46
- where: [
47
- {
48
- field: "id",
49
- value: user.id
50
- }
51
- ]
52
- });
53
- expect({
54
- name: res?.name,
55
- email: res?.email
56
- }).toEqual({
57
- name: user.name,
58
- email: user.email
59
- });
60
- });
61
- test("find model without id", async () => {
62
- const res = await adapter.findOne({
63
- model: "user",
64
- where: [
65
- {
66
- field: "email",
67
- value: user.email
68
- }
69
- ]
70
- });
71
- expect({
72
- name: res?.name,
73
- email: res?.email
74
- }).toEqual({
75
- name: user.name,
76
- email: user.email
77
- });
78
- });
79
- test("find model with select", async () => {
80
- const res = await adapter.findOne({
81
- model: "user",
82
- where: [
83
- {
84
- field: "id",
85
- value: user.id
86
- }
87
- ],
88
- select: ["email"]
89
- });
90
- expect(res).toEqual({ email: user.email });
91
- });
92
- test("update model", async () => {
93
- const newEmail = "updated@email.com";
94
- const res = await adapter.update({
95
- model: "user",
96
- where: [
97
- {
98
- field: "id",
99
- value: user.id
100
- }
101
- ],
102
- update: {
103
- email: newEmail
104
- }
105
- });
106
- expect(res).toMatchObject({
107
- email: newEmail,
108
- name: user.name
109
- });
110
- });
111
- test("should find many", async () => {
112
- const res = await adapter.findMany({
113
- model: "user"
114
- });
115
- expect(res.length).toBe(1);
116
- });
117
- test("should find many with where", async () => {
118
- const user2 = await adapter.create({
119
- model: "user",
120
- data: {
121
- id: "2",
122
- name: "user2",
123
- email: "test@email.com",
124
- emailVerified: true,
125
- createdAt: /* @__PURE__ */ new Date(),
126
- updatedAt: /* @__PURE__ */ new Date()
127
- }
128
- });
129
- const res = await adapter.findMany({
130
- model: "user",
131
- where: [
132
- {
133
- field: "id",
134
- value: user2.id
135
- }
136
- ]
137
- });
138
- expect(res.length).toBe(1);
139
- });
140
- test("should find many with operators", async () => {
141
- const newUser = await adapter.create({
142
- model: "user",
143
- data: {
144
- id: "3",
145
- name: "user",
146
- email: "test-email2@email.com",
147
- emailVerified: true,
148
- createdAt: /* @__PURE__ */ new Date(),
149
- updatedAt: /* @__PURE__ */ new Date()
150
- }
151
- });
152
- const res = await adapter.findMany({
153
- model: "user",
154
- where: [
155
- {
156
- field: "id",
157
- operator: "in",
158
- value: [user.id, newUser.id]
159
- }
160
- ]
161
- });
162
- expect(res.length).toBe(2);
163
- });
164
- test("should work with reference fields", async () => {
165
- let token = null;
166
- const user2 = await adapter.create({
167
- model: "user",
168
- data: {
169
- id: "4",
170
- name: "user",
171
- email: "my-email@email.com",
172
- emailVerified: true,
173
- createdAt: /* @__PURE__ */ new Date(),
174
- updatedAt: /* @__PURE__ */ new Date()
175
- }
176
- });
177
- const session = await adapter.create({
178
- model: "session",
179
- data: {
180
- id: "1",
181
- token: generateId(),
182
- createdAt: /* @__PURE__ */ new Date(),
183
- updatedAt: /* @__PURE__ */ new Date(),
184
- userId: user2.id,
185
- expiresAt: /* @__PURE__ */ new Date()
186
- }
187
- });
188
- token = session.token;
189
- const res = await adapter.findOne({
190
- model: "session",
191
- where: [
192
- {
193
- field: "userId",
194
- value: user2.id
195
- }
196
- ]
197
- });
198
- const resToken = await adapter.findOne({
199
- model: "session",
200
- where: [
201
- {
202
- field: "token",
203
- value: token
204
- }
205
- ]
206
- });
207
- expect(res).toMatchObject({
208
- userId: user2.id
209
- });
210
- expect(resToken).toMatchObject({
211
- userId: user2.id
212
- });
213
- });
214
- test("should find many with sortBy", async () => {
215
- await adapter.create({
216
- model: "user",
217
- data: {
218
- id: "5",
219
- name: "a",
220
- email: "a@email.com",
221
- emailVerified: true,
222
- createdAt: /* @__PURE__ */ new Date(),
223
- updatedAt: /* @__PURE__ */ new Date()
224
- }
225
- });
226
- const res = await adapter.findMany({
227
- model: "user",
228
- sortBy: {
229
- field: "name",
230
- direction: "asc"
231
- }
232
- });
233
- expect(res[0].name).toBe("a");
234
- const res2 = await adapter.findMany({
235
- model: "user",
236
- sortBy: {
237
- field: "name",
238
- direction: "desc"
239
- }
240
- });
241
- expect(res2[res2.length - 1].name).toBe("a");
242
- });
243
- test("should find many with limit", async () => {
244
- const res = await adapter.findMany({
245
- model: "user",
246
- limit: 1
247
- });
248
- expect(res.length).toBe(1);
249
- });
250
- test("should find many with offset", async () => {
251
- const res = await adapter.findMany({
252
- model: "user",
253
- offset: 2
254
- });
255
- expect(res.length).toBe(3);
256
- });
257
- test("should update with multiple where", async () => {
258
- await adapter.updateMany({
259
- model: "user",
260
- where: [
261
- {
262
- field: "name",
263
- value: user.name
264
- },
265
- {
266
- field: "email",
267
- value: user.email
268
- }
269
- ],
270
- update: {
271
- email: "updated@email.com"
272
- }
273
- });
274
- const updatedUser = await adapter.findOne({
275
- model: "user",
276
- where: [
277
- {
278
- field: "email",
279
- value: "updated@email.com"
280
- }
281
- ]
282
- });
283
- expect(updatedUser).toMatchObject({
284
- name: user.name,
285
- email: "updated@email.com"
286
- });
287
- });
288
- test("delete model", async () => {
289
- await adapter.delete({
290
- model: "user",
291
- where: [
292
- {
293
- field: "id",
294
- value: user.id
295
- }
296
- ]
297
- });
298
- const findRes = await adapter.findOne({
299
- model: "user",
300
- where: [
301
- {
302
- field: "id",
303
- value: user.id
66
+ test.skipIf(disabledTests?.CREATE_MODEL)(
67
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.CREATE_MODEL}`,
68
+ async ({ onTestFailed }) => {
69
+ resetDebugLogs();
70
+ onTestFailed(() => {
71
+ printDebugLogs();
72
+ });
73
+ const res = await (await adapter()).create({
74
+ model: "user",
75
+ data: user
76
+ });
77
+ user.id = res.id;
78
+ expect({
79
+ name: res.name,
80
+ email: res.email
81
+ }).toEqual({
82
+ name: user.name,
83
+ email: user.email
84
+ });
85
+ }
86
+ );
87
+ test.skipIf(disabledTests?.CREATE_MODEL_SHOULD_ALWAYS_RETURN_AN_ID)(
88
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.CREATE_MODEL_SHOULD_ALWAYS_RETURN_AN_ID}`,
89
+ async ({ onTestFailed }) => {
90
+ resetDebugLogs();
91
+ onTestFailed(() => {
92
+ printDebugLogs();
93
+ });
94
+ const res = await (await adapter()).create({
95
+ model: "user",
96
+ data: {
97
+ name: "test-name-without-id",
98
+ email: "test-email-without-id@email.com"
304
99
  }
305
- ]
306
- });
307
- expect(findRes).toBeNull();
308
- });
309
- test("should delete many", async () => {
310
- for (const id of ["to-be-delete1", "to-be-delete2", "to-be-delete3"]) {
311
- await adapter.create({
100
+ });
101
+ expect(res).toHaveProperty("id");
102
+ expect(typeof res?.id).toEqual("string");
103
+ }
104
+ );
105
+ test.skipIf(disabledTests?.FIND_MODEL)(
106
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.FIND_MODEL}`,
107
+ async ({ onTestFailed }) => {
108
+ resetDebugLogs();
109
+ onTestFailed(() => {
110
+ printDebugLogs();
111
+ });
112
+ const res = await (await adapter()).findOne({
113
+ model: "user",
114
+ where: [
115
+ {
116
+ field: "id",
117
+ value: user.id
118
+ }
119
+ ]
120
+ });
121
+ expect({
122
+ name: res?.name,
123
+ email: res?.email
124
+ }).toEqual({
125
+ name: user.name,
126
+ email: user.email
127
+ });
128
+ }
129
+ );
130
+ test.skipIf(disabledTests?.FIND_MODEL_WITHOUT_ID)(
131
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.FIND_MODEL_WITHOUT_ID}`,
132
+ async ({ onTestFailed }) => {
133
+ resetDebugLogs();
134
+ onTestFailed(() => {
135
+ printDebugLogs();
136
+ });
137
+ const res = await (await adapter()).findOne({
138
+ model: "user",
139
+ where: [
140
+ {
141
+ field: "email",
142
+ value: user.email
143
+ }
144
+ ]
145
+ });
146
+ expect({
147
+ name: res?.name,
148
+ email: res?.email
149
+ }).toEqual({
150
+ name: user.name,
151
+ email: user.email
152
+ });
153
+ }
154
+ );
155
+ test.skipIf(disabledTests?.FIND_MODEL_WITH_MODIFIED_FIELD_NAME)(
156
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.FIND_MODEL_WITH_MODIFIED_FIELD_NAME}`,
157
+ async ({ onTestFailed }) => {
158
+ resetDebugLogs();
159
+ onTestFailed(() => {
160
+ printDebugLogs();
161
+ });
162
+ const email = "test-email-with-modified-field@email.com";
163
+ const adapter2 = await getAdapter(
164
+ Object.assign(
165
+ {
166
+ user: {
167
+ fields: {
168
+ email: "email_address"
169
+ }
170
+ }
171
+ },
172
+ internalOptions?.predefinedOptions
173
+ )
174
+ );
175
+ const user2 = await adapter2.create({
312
176
  model: "user",
313
177
  data: {
314
- id,
315
- name: "to-be-deleted",
316
- email: `email@test-${id}.com`,
178
+ email,
179
+ name: "test-name-with-modified-field",
317
180
  emailVerified: true,
318
181
  createdAt: /* @__PURE__ */ new Date(),
319
182
  updatedAt: /* @__PURE__ */ new Date()
320
183
  }
321
184
  });
185
+ expect(user2.email).toEqual(email);
186
+ const res = await adapter2.findOne({
187
+ model: "user",
188
+ where: [
189
+ {
190
+ field: "email",
191
+ value: email
192
+ }
193
+ ]
194
+ });
195
+ expect(res).not.toBeNull();
196
+ expect(res?.email).toEqual(email);
322
197
  }
323
- const findResFirst = await adapter.findMany({
324
- model: "user",
325
- where: [
326
- {
327
- field: "name",
328
- value: "to-be-deleted"
198
+ );
199
+ test.skipIf(disabledTests?.FIND_MODEL_WITH_SELECT)(
200
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.FIND_MODEL_WITH_SELECT}`,
201
+ async ({ onTestFailed }) => {
202
+ resetDebugLogs();
203
+ onTestFailed(() => {
204
+ printDebugLogs();
205
+ });
206
+ const res = await (await adapter()).findOne({
207
+ model: "user",
208
+ where: [
209
+ {
210
+ field: "id",
211
+ value: user.id
212
+ }
213
+ ],
214
+ select: ["email"]
215
+ });
216
+ expect(res).toEqual({ email: user.email });
217
+ }
218
+ );
219
+ test.skipIf(disabledTests?.UPDATE_MODEL)(
220
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.UPDATE_MODEL}`,
221
+ async ({ onTestFailed }) => {
222
+ resetDebugLogs();
223
+ onTestFailed(() => {
224
+ printDebugLogs();
225
+ });
226
+ const newEmail = "updated@email.com";
227
+ const res = await (await adapter()).update({
228
+ model: "user",
229
+ where: [
230
+ {
231
+ field: "id",
232
+ value: user.id
233
+ }
234
+ ],
235
+ update: {
236
+ email: newEmail
329
237
  }
330
- ]
331
- });
332
- expect(findResFirst.length).toBe(3);
333
- await adapter.deleteMany({
334
- model: "user",
335
- where: [
336
- {
337
- field: "name",
338
- value: "to-be-deleted"
238
+ });
239
+ expect(res).toMatchObject({
240
+ email: newEmail,
241
+ name: user.name
242
+ });
243
+ }
244
+ );
245
+ test.skipIf(disabledTests?.SHOULD_FIND_MANY)(
246
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_FIND_MANY}`,
247
+ async ({ onTestFailed }) => {
248
+ resetDebugLogs();
249
+ onTestFailed(() => {
250
+ printDebugLogs();
251
+ });
252
+ const res = await (await adapter()).findMany({
253
+ model: "user"
254
+ });
255
+ expect(res.length).toBe(3);
256
+ }
257
+ );
258
+ test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_WHERE)(
259
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_FIND_MANY_WITH_WHERE}`,
260
+ async ({ onTestFailed }) => {
261
+ resetDebugLogs();
262
+ onTestFailed(() => {
263
+ printDebugLogs();
264
+ });
265
+ const user2 = await (await adapter()).create({
266
+ model: "user",
267
+ data: {
268
+ name: "user2",
269
+ email: "test@email.com",
270
+ emailVerified: true,
271
+ createdAt: /* @__PURE__ */ new Date(),
272
+ updatedAt: /* @__PURE__ */ new Date()
339
273
  }
340
- ]
341
- });
342
- const findRes = await adapter.findMany({
343
- model: "user",
344
- where: [
345
- {
346
- field: "name",
347
- value: "to-be-deleted"
274
+ });
275
+ const res = await (await adapter()).findMany({
276
+ model: "user",
277
+ where: [
278
+ {
279
+ field: "id",
280
+ value: user2.id
281
+ }
282
+ ]
283
+ });
284
+ expect(res.length).toBe(1);
285
+ }
286
+ );
287
+ test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_OPERATORS)(
288
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_FIND_MANY_WITH_OPERATORS}`,
289
+ async ({ onTestFailed }) => {
290
+ resetDebugLogs();
291
+ onTestFailed(() => {
292
+ printDebugLogs();
293
+ });
294
+ const newUser = await (await adapter()).create({
295
+ model: "user",
296
+ data: {
297
+ name: "user",
298
+ email: "test-email2@email.com",
299
+ emailVerified: true,
300
+ createdAt: /* @__PURE__ */ new Date(),
301
+ updatedAt: /* @__PURE__ */ new Date()
348
302
  }
349
- ]
350
- });
351
- expect(findRes.length).toBe(0);
352
- });
353
- test("shouldn't throw on delete record not found", async () => {
354
- await adapter.delete({
355
- model: "user",
356
- where: [
357
- {
358
- field: "id",
359
- value: "5"
303
+ });
304
+ const res = await (await adapter()).findMany({
305
+ model: "user",
306
+ where: [
307
+ {
308
+ field: "id",
309
+ operator: "in",
310
+ value: [user.id, newUser.id]
311
+ }
312
+ ]
313
+ });
314
+ expect(res.length).toBe(2);
315
+ }
316
+ );
317
+ test.skipIf(disabledTests?.SHOULD_WORK_WITH_REFERENCE_FIELDS)(
318
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_WORK_WITH_REFERENCE_FIELDS}`,
319
+ async ({ onTestFailed }) => {
320
+ resetDebugLogs();
321
+ onTestFailed(() => {
322
+ printDebugLogs();
323
+ });
324
+ let token = null;
325
+ const user2 = await (await adapter()).create({
326
+ model: "user",
327
+ data: {
328
+ name: "user",
329
+ email: "my-email@email.com",
330
+ emailVerified: true,
331
+ createdAt: /* @__PURE__ */ new Date(),
332
+ updatedAt: /* @__PURE__ */ new Date()
360
333
  }
361
- ]
362
- });
363
- });
364
- test("shouldn't throw on record not found", async () => {
365
- const res = await adapter.findOne({
366
- model: "user",
367
- where: [
368
- {
369
- field: "id",
370
- value: "5"
334
+ });
335
+ const session = await (await adapter()).create({
336
+ model: "session",
337
+ data: {
338
+ token: generateId(),
339
+ createdAt: /* @__PURE__ */ new Date(),
340
+ updatedAt: /* @__PURE__ */ new Date(),
341
+ userId: user2.id,
342
+ expiresAt: /* @__PURE__ */ new Date()
371
343
  }
372
- ]
373
- });
374
- expect(res).toBeNull();
375
- });
376
- test("should find many with contains operator", async () => {
377
- const res = await adapter.findMany({
378
- model: "user",
379
- where: [
380
- {
381
- field: "name",
382
- operator: "contains",
383
- value: "user2"
344
+ });
345
+ token = session.token;
346
+ const res = await (await adapter()).findOne({
347
+ model: "session",
348
+ where: [
349
+ {
350
+ field: "userId",
351
+ value: user2.id
352
+ }
353
+ ]
354
+ });
355
+ const resToken = await (await adapter()).findOne({
356
+ model: "session",
357
+ where: [
358
+ {
359
+ field: "token",
360
+ value: token
361
+ }
362
+ ]
363
+ });
364
+ expect(res).toMatchObject({
365
+ userId: user2.id
366
+ });
367
+ expect(resToken).toMatchObject({
368
+ userId: user2.id
369
+ });
370
+ }
371
+ );
372
+ test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_SORT_BY)(
373
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_FIND_MANY_WITH_SORT_BY}`,
374
+ async ({ onTestFailed }) => {
375
+ resetDebugLogs();
376
+ onTestFailed(() => {
377
+ printDebugLogs();
378
+ });
379
+ await (await adapter()).create({
380
+ model: "user",
381
+ data: {
382
+ name: "a",
383
+ email: "a@email.com",
384
+ emailVerified: true,
385
+ createdAt: /* @__PURE__ */ new Date(),
386
+ updatedAt: /* @__PURE__ */ new Date()
384
387
  }
385
- ]
386
- });
387
- expect(res.length).toBe(1);
388
- });
389
- test("should search users with startsWith", async () => {
390
- const res = await adapter.findMany({
391
- model: "user",
392
- where: [
393
- {
388
+ });
389
+ const res = await (await adapter()).findMany({
390
+ model: "user",
391
+ sortBy: {
394
392
  field: "name",
395
- operator: "starts_with",
396
- value: "us"
393
+ direction: "asc"
397
394
  }
398
- ]
399
- });
400
- expect(res.length).toBe(3);
401
- });
402
- test("should search users with endsWith", async () => {
403
- const res = await adapter.findMany({
404
- model: "user",
405
- where: [
406
- {
395
+ });
396
+ expect(res[0].name).toBe("a");
397
+ const res2 = await (await adapter()).findMany({
398
+ model: "user",
399
+ sortBy: {
407
400
  field: "name",
408
- operator: "ends_with",
409
- value: "er2"
401
+ direction: "desc"
410
402
  }
411
- ]
412
- });
413
- expect(res.length).toBe(1);
414
- });
415
- test.skipIf(opts.skipGenerateIdTest)(
416
- "should prefer generateId if provided",
417
- async () => {
418
- const customAdapter = await opts.getAdapter({
419
- advanced: {
420
- generateId: () => "mocked-id"
403
+ });
404
+ expect(res2[res2.length - 1].name).toBe("a");
405
+ }
406
+ );
407
+ test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_LIMIT)(
408
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_FIND_MANY_WITH_LIMIT}`,
409
+ async ({ onTestFailed }) => {
410
+ resetDebugLogs();
411
+ onTestFailed(() => {
412
+ printDebugLogs();
413
+ });
414
+ const res = await (await adapter()).findMany({
415
+ model: "user",
416
+ limit: 1
417
+ });
418
+ expect(res.length).toBe(1);
419
+ }
420
+ );
421
+ test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_OFFSET)(
422
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_FIND_MANY_WITH_OFFSET}`,
423
+ async ({ onTestFailed }) => {
424
+ resetDebugLogs();
425
+ onTestFailed(() => {
426
+ printDebugLogs();
427
+ });
428
+ const res = await (await adapter()).findMany({
429
+ model: "user",
430
+ offset: 2
431
+ });
432
+ expect(res.length).toBe(5);
433
+ }
434
+ );
435
+ test.skipIf(disabledTests?.SHOULD_UPDATE_WITH_MULTIPLE_WHERE)(
436
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_UPDATE_WITH_MULTIPLE_WHERE}`,
437
+ async ({ onTestFailed }) => {
438
+ resetDebugLogs();
439
+ onTestFailed(() => {
440
+ printDebugLogs();
441
+ });
442
+ await (await adapter()).updateMany({
443
+ model: "user",
444
+ where: [
445
+ {
446
+ field: "name",
447
+ value: user.name
448
+ },
449
+ {
450
+ field: "email",
451
+ value: user.email
452
+ }
453
+ ],
454
+ update: {
455
+ email: "updated@email.com"
421
456
  }
422
457
  });
458
+ const updatedUser = await (await adapter()).findOne({
459
+ model: "user",
460
+ where: [
461
+ {
462
+ field: "email",
463
+ value: "updated@email.com"
464
+ }
465
+ ]
466
+ });
467
+ expect(updatedUser).toMatchObject({
468
+ name: user.name,
469
+ email: "updated@email.com"
470
+ });
471
+ }
472
+ );
473
+ test.skipIf(disabledTests?.DELETE_MODEL)(
474
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.DELETE_MODEL}`,
475
+ async ({ onTestFailed }) => {
476
+ resetDebugLogs();
477
+ onTestFailed(() => {
478
+ printDebugLogs();
479
+ });
480
+ await (await adapter()).delete({
481
+ model: "user",
482
+ where: [
483
+ {
484
+ field: "id",
485
+ value: user.id
486
+ }
487
+ ]
488
+ });
489
+ const findRes = await (await adapter()).findOne({
490
+ model: "user",
491
+ where: [
492
+ {
493
+ field: "id",
494
+ value: user.id
495
+ }
496
+ ]
497
+ });
498
+ expect(findRes).toBeNull();
499
+ }
500
+ );
501
+ test.skipIf(disabledTests?.SHOULD_DELETE_MANY)(
502
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_DELETE_MANY}`,
503
+ async ({ onTestFailed }) => {
504
+ resetDebugLogs();
505
+ onTestFailed(() => {
506
+ printDebugLogs();
507
+ });
508
+ for (const i of ["to-be-delete-1", "to-be-delete-2", "to-be-delete-3"]) {
509
+ await (await adapter()).create({
510
+ model: "user",
511
+ data: {
512
+ name: "to-be-deleted",
513
+ email: `email@test-${i}.com`,
514
+ emailVerified: true,
515
+ createdAt: /* @__PURE__ */ new Date(),
516
+ updatedAt: /* @__PURE__ */ new Date()
517
+ }
518
+ });
519
+ }
520
+ const findResFirst = await (await adapter()).findMany({
521
+ model: "user",
522
+ where: [
523
+ {
524
+ field: "name",
525
+ value: "to-be-deleted"
526
+ }
527
+ ]
528
+ });
529
+ expect(findResFirst.length).toBe(3);
530
+ await (await adapter()).deleteMany({
531
+ model: "user",
532
+ where: [
533
+ {
534
+ field: "name",
535
+ value: "to-be-deleted"
536
+ }
537
+ ]
538
+ });
539
+ const findRes = await (await adapter()).findMany({
540
+ model: "user",
541
+ where: [
542
+ {
543
+ field: "name",
544
+ value: "to-be-deleted"
545
+ }
546
+ ]
547
+ });
548
+ expect(findRes.length).toBe(0);
549
+ }
550
+ );
551
+ test.skipIf(disabledTests?.SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND)(
552
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND}`,
553
+ async ({ onTestFailed }) => {
554
+ resetDebugLogs();
555
+ onTestFailed(() => {
556
+ printDebugLogs();
557
+ });
558
+ await (await adapter()).delete({
559
+ model: "user",
560
+ where: [
561
+ {
562
+ field: "id",
563
+ value: "100000"
564
+ }
565
+ ]
566
+ });
567
+ }
568
+ );
569
+ test.skipIf(disabledTests?.SHOULD_NOT_THROW_ON_RECORD_NOT_FOUND)(
570
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_NOT_THROW_ON_RECORD_NOT_FOUND}`,
571
+ async ({ onTestFailed }) => {
572
+ resetDebugLogs();
573
+ onTestFailed(() => {
574
+ printDebugLogs();
575
+ });
576
+ const res = await (await adapter()).findOne({
577
+ model: "user",
578
+ where: [
579
+ {
580
+ field: "id",
581
+ value: "100000"
582
+ }
583
+ ]
584
+ });
585
+ expect(res).toBeNull();
586
+ }
587
+ );
588
+ test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_CONTAINS_OPERATOR)(
589
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_FIND_MANY_WITH_CONTAINS_OPERATOR}`,
590
+ async ({ onTestFailed }) => {
591
+ resetDebugLogs();
592
+ onTestFailed(() => {
593
+ printDebugLogs();
594
+ });
595
+ const res = await (await adapter()).findMany({
596
+ model: "user",
597
+ where: [
598
+ {
599
+ field: "name",
600
+ operator: "contains",
601
+ value: "user2"
602
+ }
603
+ ]
604
+ });
605
+ expect(res.length).toBe(1);
606
+ }
607
+ );
608
+ test.skipIf(disabledTests?.SHOULD_SEARCH_USERS_WITH_STARTS_WITH)(
609
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_SEARCH_USERS_WITH_STARTS_WITH}`,
610
+ async ({ onTestFailed }) => {
611
+ resetDebugLogs();
612
+ onTestFailed(() => {
613
+ printDebugLogs();
614
+ });
615
+ const res = await (await adapter()).findMany({
616
+ model: "user",
617
+ where: [
618
+ {
619
+ field: "name",
620
+ operator: "starts_with",
621
+ value: "us"
622
+ }
623
+ ]
624
+ });
625
+ expect(res.length).toBe(3);
626
+ }
627
+ );
628
+ test.skipIf(disabledTests?.SHOULD_SEARCH_USERS_WITH_ENDS_WITH)(
629
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_SEARCH_USERS_WITH_ENDS_WITH}`,
630
+ async ({ onTestFailed }) => {
631
+ resetDebugLogs();
632
+ onTestFailed(() => {
633
+ printDebugLogs();
634
+ });
635
+ const res = await (await adapter()).findMany({
636
+ model: "user",
637
+ where: [
638
+ {
639
+ field: "name",
640
+ operator: "ends_with",
641
+ value: "er2"
642
+ }
643
+ ]
644
+ });
645
+ expect(res.length).toBe(1);
646
+ }
647
+ );
648
+ test.skipIf(disabledTests?.SHOULD_PREFER_GENERATE_ID_IF_PROVIDED)(
649
+ `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_PREFER_GENERATE_ID_IF_PROVIDED}`,
650
+ async ({ onTestFailed }) => {
651
+ resetDebugLogs();
652
+ onTestFailed(() => {
653
+ printDebugLogs();
654
+ });
655
+ const customAdapter = await getAdapter(
656
+ Object.assign(
657
+ {
658
+ advanced: {
659
+ database: {
660
+ generateId: () => "mocked-id"
661
+ }
662
+ }
663
+ },
664
+ internalOptions?.predefinedOptions
665
+ )
666
+ );
423
667
  const res = await customAdapter.create({
424
668
  model: "user",
425
669
  data: {
426
- id: "1",
427
670
  name: "user4",
428
671
  email: "user4@email.com",
429
672
  emailVerified: true,
@@ -435,5 +678,94 @@ async function runAdapterTest(opts) {
435
678
  }
436
679
  );
437
680
  }
681
+ async function runAdapterTest(opts) {
682
+ return adapterTest(opts);
683
+ }
684
+ async function runNumberIdAdapterTest(opts) {
685
+ const cleanup = [];
686
+ const adapter = async () => await opts.getAdapter({
687
+ advanced: {
688
+ database: {
689
+ useNumberId: true
690
+ }
691
+ }
692
+ });
693
+ describe("Should run number id specific tests", async () => {
694
+ let idNumber = -1;
695
+ async function resetDebugLogs() {
696
+ (await adapter())?.adapterTestDebugLogs?.resetDebugLogs();
697
+ }
698
+ async function printDebugLogs() {
699
+ (await adapter())?.adapterTestDebugLogs?.printDebugLogs();
700
+ }
701
+ test.skipIf(opts.disableTests?.SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT)(
702
+ `${opts.testPrefix ? `${opts.testPrefix} - ` : ""}${numberIdAdapterTests.SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT}`,
703
+ async ({ onTestFailed }) => {
704
+ resetDebugLogs();
705
+ onTestFailed(() => {
706
+ printDebugLogs();
707
+ });
708
+ const res = await (await adapter()).create({
709
+ model: "user",
710
+ data: {
711
+ name: "user",
712
+ email: "user@email.com"
713
+ }
714
+ });
715
+ cleanup.push({ modelName: "user", id: res.id });
716
+ expect(typeof res.id).toBe("string");
717
+ expect(parseInt(res.id)).toBeGreaterThan(0);
718
+ idNumber = parseInt(res.id);
719
+ }
720
+ );
721
+ test.skipIf(opts.disableTests?.SHOULD_INCREMENT_THE_ID_BY_1)(
722
+ `${opts.testPrefix ? `${opts.testPrefix} - ` : ""}${numberIdAdapterTests.SHOULD_INCREMENT_THE_ID_BY_1}`,
723
+ async ({ onTestFailed }) => {
724
+ resetDebugLogs();
725
+ onTestFailed(() => {
726
+ console.log(`ID number from last create: ${idNumber}`);
727
+ printDebugLogs();
728
+ });
729
+ const res = await (await adapter()).create({
730
+ model: "user",
731
+ data: {
732
+ name: "user2",
733
+ email: "user2@email.com"
734
+ }
735
+ });
736
+ cleanup.push({ modelName: "user", id: res.id });
737
+ expect(parseInt(res.id)).toBe(idNumber + 1);
738
+ }
739
+ );
740
+ });
741
+ describe("Should run normal adapter tests with number id enabled", async () => {
742
+ beforeAll(async () => {
743
+ for (const { modelName, id } of cleanup) {
744
+ await (await adapter()).delete({
745
+ model: modelName,
746
+ where: [{ field: "id", value: id }]
747
+ });
748
+ }
749
+ });
750
+ await adapterTest(
751
+ {
752
+ ...opts,
753
+ disableTests: {
754
+ ...opts.disableTests,
755
+ SHOULD_PREFER_GENERATE_ID_IF_PROVIDED: true
756
+ }
757
+ },
758
+ {
759
+ predefinedOptions: {
760
+ advanced: {
761
+ database: {
762
+ useNumberId: true
763
+ }
764
+ }
765
+ }
766
+ }
767
+ );
768
+ });
769
+ }
438
770
 
439
- export { runAdapterTest };
771
+ export { runAdapterTest, runNumberIdAdapterTest };