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