datahike-browser-tests 1.0.0

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 (324) hide show
  1. package/.circleci/config.yml +405 -0
  2. package/.circleci/scripts/gen_ci.clj +194 -0
  3. package/.cirrus.yml +60 -0
  4. package/.clj-kondo/babashka/sci/config.edn +1 -0
  5. package/.clj-kondo/babashka/sci/sci/core.clj +9 -0
  6. package/.clj-kondo/config.edn +95 -0
  7. package/.dir-locals.el +2 -0
  8. package/.github/FUNDING.yml +3 -0
  9. package/.github/ISSUE_TEMPLATE/1-bug-report.yml +68 -0
  10. package/.github/ISSUE_TEMPLATE/2-feature-request.yml +28 -0
  11. package/.github/ISSUE_TEMPLATE/config.yml +6 -0
  12. package/.github/pull_request_template.md +24 -0
  13. package/.github/workflows/native-image.yml +84 -0
  14. package/LICENSE +203 -0
  15. package/README.md +273 -0
  16. package/bb/deps.edn +9 -0
  17. package/bb/resources/github-fingerprints +3 -0
  18. package/bb/resources/native-image-tests/run-bb-pod-tests.clj +162 -0
  19. package/bb/resources/native-image-tests/run-libdatahike-tests +12 -0
  20. package/bb/resources/native-image-tests/run-native-image-tests +74 -0
  21. package/bb/resources/native-image-tests/run-python-tests +22 -0
  22. package/bb/resources/native-image-tests/testconfig.attr-refs.edn +6 -0
  23. package/bb/resources/native-image-tests/testconfig.edn +5 -0
  24. package/bb/resources/template/.settings/org.eclipse.jdt.apt.core.prefs +2 -0
  25. package/bb/resources/template/.settings/org.eclipse.jdt.core.prefs +9 -0
  26. package/bb/resources/template/.settings/org.eclipse.m2e.core.prefs +4 -0
  27. package/bb/resources/template/pom.xml +22 -0
  28. package/bb/src/tools/build.clj +132 -0
  29. package/bb/src/tools/clj_kondo.clj +32 -0
  30. package/bb/src/tools/deploy.clj +26 -0
  31. package/bb/src/tools/examples.clj +19 -0
  32. package/bb/src/tools/npm.clj +100 -0
  33. package/bb/src/tools/python.clj +14 -0
  34. package/bb/src/tools/release.clj +94 -0
  35. package/bb/src/tools/test.clj +148 -0
  36. package/bb/src/tools/version.clj +47 -0
  37. package/bb.edn +269 -0
  38. package/benchmark/src/benchmark/cli.clj +195 -0
  39. package/benchmark/src/benchmark/compare.clj +157 -0
  40. package/benchmark/src/benchmark/config.clj +316 -0
  41. package/benchmark/src/benchmark/measure.clj +187 -0
  42. package/benchmark/src/benchmark/store.clj +190 -0
  43. package/benchmark/test/benchmark/measure_test.clj +156 -0
  44. package/build.clj +30 -0
  45. package/config.edn +49 -0
  46. package/deps.edn +138 -0
  47. package/dev/sandbox.clj +82 -0
  48. package/dev/sandbox.cljs +127 -0
  49. package/dev/sandbox_benchmarks.clj +27 -0
  50. package/dev/sandbox_client.clj +87 -0
  51. package/dev/sandbox_transact_bench.clj +109 -0
  52. package/dev/user.clj +79 -0
  53. package/doc/README.md +96 -0
  54. package/doc/adl/README.md +6 -0
  55. package/doc/adl/adr-000-adr.org +28 -0
  56. package/doc/adl/adr-001-attribute-references.org +15 -0
  57. package/doc/adl/adr-002-build-tooling.org +54 -0
  58. package/doc/adl/adr-003-db-meta-data.md +52 -0
  59. package/doc/adl/adr-004-github-flow.md +40 -0
  60. package/doc/adl/adr-XYZ-template.md +30 -0
  61. package/doc/adl/index.org +3 -0
  62. package/doc/assets/datahike-logo.svg +3 -0
  63. package/doc/assets/datahiking-invoice.org +85 -0
  64. package/doc/assets/hhtree2.png +0 -0
  65. package/doc/assets/network_topology.svg +624 -0
  66. package/doc/assets/perf.png +0 -0
  67. package/doc/assets/schema_mindmap.mm +132 -0
  68. package/doc/assets/schema_mindmap.svg +970 -0
  69. package/doc/assets/temporal_index.mm +74 -0
  70. package/doc/backend-development.md +78 -0
  71. package/doc/bb-pod.md +89 -0
  72. package/doc/benchmarking.md +360 -0
  73. package/doc/bindings/edn-conversion.md +383 -0
  74. package/doc/cli.md +162 -0
  75. package/doc/cljdoc.edn +27 -0
  76. package/doc/cljs-support.md +133 -0
  77. package/doc/config.md +406 -0
  78. package/doc/contributing.md +114 -0
  79. package/doc/datalog-vs-sql.md +210 -0
  80. package/doc/datomic_differences.md +109 -0
  81. package/doc/development/pull-api-ns.md +186 -0
  82. package/doc/development/pull-frame-state-diagram.jpg +0 -0
  83. package/doc/distributed.md +566 -0
  84. package/doc/entity_spec.md +92 -0
  85. package/doc/gc.md +273 -0
  86. package/doc/java-api.md +808 -0
  87. package/doc/javascript-api.md +421 -0
  88. package/doc/libdatahike.md +86 -0
  89. package/doc/logging_and_error_handling.md +43 -0
  90. package/doc/norms.md +66 -0
  91. package/doc/schema-migration.md +85 -0
  92. package/doc/schema.md +287 -0
  93. package/doc/storage-backends.md +363 -0
  94. package/doc/store-id-refactoring.md +596 -0
  95. package/doc/time_variance.md +325 -0
  96. package/doc/unstructured.md +167 -0
  97. package/doc/versioning.md +261 -0
  98. package/examples/basic/README.md +19 -0
  99. package/examples/basic/deps.edn +6 -0
  100. package/examples/basic/docker-compose.yml +13 -0
  101. package/examples/basic/src/examples/core.clj +60 -0
  102. package/examples/basic/src/examples/schema.clj +155 -0
  103. package/examples/basic/src/examples/store.clj +60 -0
  104. package/examples/basic/src/examples/time_travel.clj +185 -0
  105. package/examples/java/.settings/org.eclipse.core.resources.prefs +3 -0
  106. package/examples/java/.settings/org.eclipse.jdt.apt.core.prefs +2 -0
  107. package/examples/java/.settings/org.eclipse.jdt.core.prefs +9 -0
  108. package/examples/java/.settings/org.eclipse.m2e.core.prefs +4 -0
  109. package/examples/java/README.md +162 -0
  110. package/examples/java/pom.xml +62 -0
  111. package/examples/java/src/main/java/examples/QuickStart.java +115 -0
  112. package/examples/java/src/main/java/examples/SchemaExample.java +148 -0
  113. package/examples/java/src/main/java/examples/TimeTravelExample.java +121 -0
  114. package/flake.lock +27 -0
  115. package/flake.nix +27 -0
  116. package/http-server/datahike/http/middleware.clj +75 -0
  117. package/http-server/datahike/http/server.clj +269 -0
  118. package/java/src/datahike/java/Database.java +274 -0
  119. package/java/src/datahike/java/Datahike.java +281 -0
  120. package/java/src/datahike/java/DatahikeGeneratedTest.java +349 -0
  121. package/java/src/datahike/java/DatahikeTest.java +370 -0
  122. package/java/src/datahike/java/EDN.java +170 -0
  123. package/java/src/datahike/java/IEntity.java +11 -0
  124. package/java/src/datahike/java/Keywords.java +161 -0
  125. package/java/src/datahike/java/SchemaFlexibility.java +52 -0
  126. package/java/src/datahike/java/Util.java +219 -0
  127. package/karma.conf.js +19 -0
  128. package/libdatahike/compile-cpp +7 -0
  129. package/libdatahike/src/datahike/impl/LibDatahikeBase.java +203 -0
  130. package/libdatahike/src/datahike/impl/libdatahike.clj +59 -0
  131. package/libdatahike/src/test_cpp.cpp +61 -0
  132. package/npm-package/PUBLISHING.md +140 -0
  133. package/npm-package/README.md +226 -0
  134. package/npm-package/package.template.json +34 -0
  135. package/npm-package/test-isomorphic.ts +281 -0
  136. package/npm-package/test.js +557 -0
  137. package/npm-package/typescript-test.ts +70 -0
  138. package/package.json +16 -0
  139. package/pydatahike/README.md +569 -0
  140. package/pydatahike/pyproject.toml +91 -0
  141. package/pydatahike/setup.py +42 -0
  142. package/pydatahike/src/datahike/__init__.py +134 -0
  143. package/pydatahike/src/datahike/_native.py +250 -0
  144. package/pydatahike/src/datahike/_version.py +2 -0
  145. package/pydatahike/src/datahike/database.py +722 -0
  146. package/pydatahike/src/datahike/edn.py +311 -0
  147. package/pydatahike/src/datahike/py.typed +0 -0
  148. package/pydatahike/tests/conftest.py +17 -0
  149. package/pydatahike/tests/test_basic.py +170 -0
  150. package/pydatahike/tests/test_database.py +51 -0
  151. package/pydatahike/tests/test_edn_conversion.py +299 -0
  152. package/pydatahike/tests/test_query.py +99 -0
  153. package/pydatahike/tests/test_schema.py +55 -0
  154. package/resources/clj-kondo.exports/io.replikativ/datahike/config.edn +5 -0
  155. package/resources/example_server.edn +4 -0
  156. package/shadow-cljs.edn +56 -0
  157. package/src/data_readers.clj +7 -0
  158. package/src/datahike/api/impl.cljc +176 -0
  159. package/src/datahike/api/specification.cljc +633 -0
  160. package/src/datahike/api/types.cljc +261 -0
  161. package/src/datahike/api.cljc +41 -0
  162. package/src/datahike/array.cljc +99 -0
  163. package/src/datahike/cli.clj +166 -0
  164. package/src/datahike/cljs.cljs +6 -0
  165. package/src/datahike/codegen/cli.clj +406 -0
  166. package/src/datahike/codegen/clj_kondo.clj +291 -0
  167. package/src/datahike/codegen/java.clj +403 -0
  168. package/src/datahike/codegen/naming.cljc +33 -0
  169. package/src/datahike/codegen/native.clj +559 -0
  170. package/src/datahike/codegen/pod.clj +488 -0
  171. package/src/datahike/codegen/python.clj +838 -0
  172. package/src/datahike/codegen/report.clj +55 -0
  173. package/src/datahike/codegen/typescript.clj +262 -0
  174. package/src/datahike/codegen/validation.clj +145 -0
  175. package/src/datahike/config.cljc +294 -0
  176. package/src/datahike/connections.cljc +16 -0
  177. package/src/datahike/connector.cljc +265 -0
  178. package/src/datahike/constants.cljc +142 -0
  179. package/src/datahike/core.cljc +297 -0
  180. package/src/datahike/datom.cljc +459 -0
  181. package/src/datahike/db/interface.cljc +119 -0
  182. package/src/datahike/db/search.cljc +305 -0
  183. package/src/datahike/db/transaction.cljc +937 -0
  184. package/src/datahike/db/utils.cljc +338 -0
  185. package/src/datahike/db.cljc +956 -0
  186. package/src/datahike/experimental/unstructured.cljc +126 -0
  187. package/src/datahike/experimental/versioning.cljc +172 -0
  188. package/src/datahike/externs.js +31 -0
  189. package/src/datahike/gc.cljc +69 -0
  190. package/src/datahike/http/client.clj +188 -0
  191. package/src/datahike/http/writer.clj +79 -0
  192. package/src/datahike/impl/entity.cljc +218 -0
  193. package/src/datahike/index/interface.cljc +93 -0
  194. package/src/datahike/index/persistent_set.cljc +469 -0
  195. package/src/datahike/index/utils.cljc +44 -0
  196. package/src/datahike/index.cljc +32 -0
  197. package/src/datahike/js/api.cljs +172 -0
  198. package/src/datahike/js/api_macros.clj +22 -0
  199. package/src/datahike/js.cljs +163 -0
  200. package/src/datahike/json.cljc +209 -0
  201. package/src/datahike/lru.cljc +146 -0
  202. package/src/datahike/migrate.clj +39 -0
  203. package/src/datahike/norm/norm.clj +245 -0
  204. package/src/datahike/online_gc.cljc +252 -0
  205. package/src/datahike/pod.clj +155 -0
  206. package/src/datahike/pull_api.cljc +325 -0
  207. package/src/datahike/query.cljc +1945 -0
  208. package/src/datahike/query_stats.cljc +88 -0
  209. package/src/datahike/readers.cljc +62 -0
  210. package/src/datahike/remote.cljc +218 -0
  211. package/src/datahike/schema.cljc +228 -0
  212. package/src/datahike/schema_cache.cljc +42 -0
  213. package/src/datahike/spec.cljc +101 -0
  214. package/src/datahike/store.cljc +80 -0
  215. package/src/datahike/tools.cljc +308 -0
  216. package/src/datahike/transit.cljc +80 -0
  217. package/src/datahike/writer.cljc +239 -0
  218. package/src/datahike/writing.cljc +362 -0
  219. package/src/deps.cljs +1 -0
  220. package/src-hitchhiker-tree/datahike/index/hitchhiker_tree/insert.cljc +76 -0
  221. package/src-hitchhiker-tree/datahike/index/hitchhiker_tree/upsert.cljc +128 -0
  222. package/src-hitchhiker-tree/datahike/index/hitchhiker_tree.cljc +213 -0
  223. package/test/datahike/backward_compatibility_test/src/backward_test.clj +37 -0
  224. package/test/datahike/integration_test/config_record_file_test.clj +14 -0
  225. package/test/datahike/integration_test/config_record_test.clj +14 -0
  226. package/test/datahike/integration_test/depr_config_uri_test.clj +15 -0
  227. package/test/datahike/integration_test/return_map_test.clj +62 -0
  228. package/test/datahike/integration_test.cljc +67 -0
  229. package/test/datahike/norm/norm_test.clj +124 -0
  230. package/test/datahike/norm/resources/naming-and-sorting-test/001-a1-example.edn +5 -0
  231. package/test/datahike/norm/resources/naming-and-sorting-test/002-a2-example.edn +5 -0
  232. package/test/datahike/norm/resources/naming-and-sorting-test/003-tx-fn-test.edn +1 -0
  233. package/test/datahike/norm/resources/naming-and-sorting-test/004-tx-data-and-tx-fn-test.edn +5 -0
  234. package/test/datahike/norm/resources/naming-and-sorting-test/01-transact-basic-characters.edn +2 -0
  235. package/test/datahike/norm/resources/naming-and-sorting-test/02 add occupation.edn +5 -0
  236. package/test/datahike/norm/resources/naming-and-sorting-test/checksums.edn +12 -0
  237. package/test/datahike/norm/resources/simple-test/001-a1-example.edn +5 -0
  238. package/test/datahike/norm/resources/simple-test/002-a2-example.edn +5 -0
  239. package/test/datahike/norm/resources/simple-test/checksums.edn +4 -0
  240. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/001-a1-example.edn +5 -0
  241. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/002-a2-example.edn +5 -0
  242. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/003-tx-fn-test.edn +1 -0
  243. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/checksums.edn +6 -0
  244. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/second/004-tx-data-and-tx-fn-test.edn +5 -0
  245. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/second/checksums.edn +2 -0
  246. package/test/datahike/norm/resources/tx-fn-test/first/001-a1-example.edn +5 -0
  247. package/test/datahike/norm/resources/tx-fn-test/first/002-a2-example.edn +5 -0
  248. package/test/datahike/norm/resources/tx-fn-test/first/checksums.edn +4 -0
  249. package/test/datahike/norm/resources/tx-fn-test/second/003-tx-fn-test.edn +1 -0
  250. package/test/datahike/norm/resources/tx-fn-test/second/checksums.edn +2 -0
  251. package/test/datahike/test/api_test.cljc +895 -0
  252. package/test/datahike/test/array_test.cljc +40 -0
  253. package/test/datahike/test/attribute_refs/datoms_test.cljc +140 -0
  254. package/test/datahike/test/attribute_refs/db_test.cljc +42 -0
  255. package/test/datahike/test/attribute_refs/differences_test.cljc +515 -0
  256. package/test/datahike/test/attribute_refs/entity_test.cljc +89 -0
  257. package/test/datahike/test/attribute_refs/pull_api_test.cljc +320 -0
  258. package/test/datahike/test/attribute_refs/query_find_specs_test.cljc +59 -0
  259. package/test/datahike/test/attribute_refs/query_fns_test.cljc +130 -0
  260. package/test/datahike/test/attribute_refs/query_interop_test.cljc +47 -0
  261. package/test/datahike/test/attribute_refs/query_not_test.cljc +193 -0
  262. package/test/datahike/test/attribute_refs/query_or_test.cljc +137 -0
  263. package/test/datahike/test/attribute_refs/query_pull_test.cljc +156 -0
  264. package/test/datahike/test/attribute_refs/query_rules_test.cljc +176 -0
  265. package/test/datahike/test/attribute_refs/query_test.cljc +241 -0
  266. package/test/datahike/test/attribute_refs/temporal_search.cljc +22 -0
  267. package/test/datahike/test/attribute_refs/transact_test.cljc +220 -0
  268. package/test/datahike/test/attribute_refs/utils.cljc +128 -0
  269. package/test/datahike/test/cache_test.cljc +38 -0
  270. package/test/datahike/test/components_test.cljc +92 -0
  271. package/test/datahike/test/config_test.cljc +158 -0
  272. package/test/datahike/test/core_test.cljc +105 -0
  273. package/test/datahike/test/datom_test.cljc +44 -0
  274. package/test/datahike/test/db_test.cljc +54 -0
  275. package/test/datahike/test/entity_spec_test.cljc +159 -0
  276. package/test/datahike/test/entity_test.cljc +103 -0
  277. package/test/datahike/test/explode_test.cljc +143 -0
  278. package/test/datahike/test/filter_test.cljc +75 -0
  279. package/test/datahike/test/gc_test.cljc +159 -0
  280. package/test/datahike/test/http/server_test.clj +192 -0
  281. package/test/datahike/test/http/writer_test.clj +86 -0
  282. package/test/datahike/test/ident_test.cljc +32 -0
  283. package/test/datahike/test/index_test.cljc +345 -0
  284. package/test/datahike/test/insert.cljc +125 -0
  285. package/test/datahike/test/java_bindings_test.clj +6 -0
  286. package/test/datahike/test/listen_test.cljc +41 -0
  287. package/test/datahike/test/lookup_refs_test.cljc +266 -0
  288. package/test/datahike/test/lru_test.cljc +27 -0
  289. package/test/datahike/test/migrate_test.clj +297 -0
  290. package/test/datahike/test/model/core.cljc +376 -0
  291. package/test/datahike/test/model/invariant.cljc +142 -0
  292. package/test/datahike/test/model/rng.cljc +82 -0
  293. package/test/datahike/test/model_test.clj +217 -0
  294. package/test/datahike/test/nodejs_test.cljs +262 -0
  295. package/test/datahike/test/online_gc_test.cljc +475 -0
  296. package/test/datahike/test/pod_test.clj +369 -0
  297. package/test/datahike/test/pull_api_test.cljc +474 -0
  298. package/test/datahike/test/purge_test.cljc +144 -0
  299. package/test/datahike/test/query_aggregates_test.cljc +101 -0
  300. package/test/datahike/test/query_find_specs_test.cljc +52 -0
  301. package/test/datahike/test/query_fns_test.cljc +523 -0
  302. package/test/datahike/test/query_interop_test.cljc +47 -0
  303. package/test/datahike/test/query_not_test.cljc +189 -0
  304. package/test/datahike/test/query_or_test.cljc +158 -0
  305. package/test/datahike/test/query_pull_test.cljc +147 -0
  306. package/test/datahike/test/query_rules_test.cljc +248 -0
  307. package/test/datahike/test/query_stats_test.cljc +218 -0
  308. package/test/datahike/test/query_test.cljc +984 -0
  309. package/test/datahike/test/schema_test.cljc +424 -0
  310. package/test/datahike/test/specification_test.cljc +30 -0
  311. package/test/datahike/test/store_test.cljc +78 -0
  312. package/test/datahike/test/stress_test.cljc +57 -0
  313. package/test/datahike/test/time_variance_test.cljc +518 -0
  314. package/test/datahike/test/tools_test.clj +134 -0
  315. package/test/datahike/test/transact_test.cljc +518 -0
  316. package/test/datahike/test/tuples_test.cljc +564 -0
  317. package/test/datahike/test/unstructured_test.cljc +291 -0
  318. package/test/datahike/test/upsert_impl_test.cljc +205 -0
  319. package/test/datahike/test/upsert_test.cljc +363 -0
  320. package/test/datahike/test/utils.cljc +110 -0
  321. package/test/datahike/test/validation_test.cljc +48 -0
  322. package/test/datahike/test/versioning_test.cljc +56 -0
  323. package/test/datahike/test.cljc +66 -0
  324. package/tests.edn +24 -0
@@ -0,0 +1,349 @@
1
+ package datahike.java;
2
+
3
+ import clojure.java.api.Clojure;
4
+ import clojure.lang.APersistentMap;
5
+ import clojure.lang.APersistentVector;
6
+ import org.junit.After;
7
+ import org.junit.Before;
8
+ import org.junit.Test;
9
+
10
+ import java.util.*;
11
+ import java.util.concurrent.Future;
12
+
13
+ import static datahike.java.Util.*;
14
+ import static org.junit.Assert.*;
15
+
16
+ /**
17
+ * Tests for all generated API methods in DatahikeGenerated.
18
+ * Ensures comprehensive coverage of the generated bindings.
19
+ */
20
+ public class DatahikeGeneratedTest {
21
+
22
+ private Map<String, Object> config;
23
+ private Object conn;
24
+ private Object schema = Clojure.read("[{:db/ident :name\n" +
25
+ " :db/valueType :db.type/string\n" +
26
+ " :db/unique :db.unique/identity\n" +
27
+ " :db/index true\n" +
28
+ " :db/cardinality :db.cardinality/one}\n" +
29
+ " {:db/ident :age\n" +
30
+ " :db/valueType :db.type/long\n" +
31
+ " :db/cardinality :db.cardinality/one}]");
32
+
33
+ @Before
34
+ public void setUp() {
35
+ // Create config using Java Map for testing mapToPersistentMap conversion
36
+ UUID connId = UUID.randomUUID();
37
+ Map<String, Object> storeConfig = new HashMap<>();
38
+ storeConfig.put("backend", kwd(":memory"));
39
+ storeConfig.put("id", connId);
40
+
41
+ config = new HashMap<>();
42
+ config.put("store", storeConfig);
43
+ config.put("initial-tx", schema);
44
+
45
+ // Create database and connection
46
+ Datahike.createDatabase(config);
47
+ conn = Datahike.connect(config);
48
+
49
+ // Add test data
50
+ Datahike.transact(conn, vec(
51
+ map(kwd(":db/id"), 1, kwd(":name"), "Alice", kwd(":age"), 25L),
52
+ map(kwd(":db/id"), 2, kwd(":name"), "Bob", kwd(":age"), 30L),
53
+ map(kwd(":db/id"), 3, kwd(":name"), "Charlie", kwd(":age"), 35L)));
54
+ }
55
+
56
+ @After
57
+ public void tearDown() {
58
+ if (conn != null) {
59
+ Datahike.release(conn);
60
+ }
61
+ Datahike.deleteDatabase(config);
62
+ }
63
+
64
+ @Test
65
+ public void testDb() {
66
+ // Test db() method (alternative to deref)
67
+ Object db = Datahike.db(conn);
68
+ assertNotNull(db);
69
+
70
+ // Verify we can query it
71
+ Set res = (Set) Datahike.q("[:find ?n :where [_ :name ?n]]", db);
72
+ assertEquals(3, res.size());
73
+ }
74
+
75
+ @Test
76
+ public void testDatoms() {
77
+ Object db = Datahike.db(conn);
78
+
79
+ // Test datoms with Object arguments (map-based API)
80
+ // Note: datoms API expects specific arguments based on the spec
81
+ // This is tested more comprehensively in the Clojure tests
82
+ // Just verify the method is accessible
83
+ Object datoms = Datahike.datoms(db, kwd(":eavt"));
84
+ assertNotNull(datoms);
85
+ }
86
+
87
+ @Test
88
+ public void testDeleteDatabase() {
89
+ // Create a separate database for deletion test
90
+ Map<String, Object> tempConfig = new HashMap<>();
91
+ Map<String, Object> tempStore = new HashMap<>();
92
+ tempStore.put("backend", kwd(":memory"));
93
+ tempStore.put("id", UUID.randomUUID());
94
+ tempConfig.put("store", tempStore);
95
+
96
+ Datahike.createDatabase(tempConfig);
97
+ assertTrue(Datahike.databaseExists(tempConfig));
98
+
99
+ Datahike.deleteDatabase(tempConfig);
100
+ assertFalse(Datahike.databaseExists(tempConfig));
101
+ }
102
+
103
+ @Test
104
+ public void testSchema() {
105
+ Object db = Datahike.db(conn);
106
+ Object schema = Datahike.schema(db);
107
+ assertNotNull(schema);
108
+
109
+ // Schema should be a map
110
+ assertTrue(schema instanceof Map);
111
+ Map<?, ?> schemaMap = (Map<?, ?>) schema;
112
+
113
+ // Should contain our schema attributes
114
+ assertTrue(schemaMap.containsKey(kwd(":name")));
115
+ assertTrue(schemaMap.containsKey(kwd(":age")));
116
+ }
117
+
118
+ @Test
119
+ public void testReverseSchema() {
120
+ Object db = Datahike.db(conn);
121
+ Map<?, ?> reverseSchema = Datahike.reverseSchema(db);
122
+ assertNotNull(reverseSchema);
123
+
124
+ // Reverse schema maps attribute ids to keywords
125
+ assertFalse(reverseSchema.isEmpty());
126
+ }
127
+
128
+ @Test
129
+ public void testMetrics() {
130
+ Object db = Datahike.db(conn);
131
+ Object metrics = Datahike.metrics(db);
132
+ assertNotNull(metrics);
133
+
134
+ // Metrics should contain datom count
135
+ assertTrue(metrics instanceof Map);
136
+ }
137
+
138
+ @Test
139
+ public void testQueryStats() {
140
+ Object db = Datahike.db(conn);
141
+ String query = "[:find ?n :where [?e :name ?n]]";
142
+
143
+ // Test single-arity queryStats
144
+ Map<?, ?> stats = Datahike.queryStats(map(kwd(":query"), Clojure.read(query),
145
+ kwd(":args"), vec(db)));
146
+ assertNotNull(stats);
147
+
148
+ // Should contain execution stats
149
+ assertTrue(stats.containsKey(kwd(":query")));
150
+ }
151
+
152
+ @Test
153
+ public void testWith() {
154
+ Object db = Datahike.db(conn);
155
+
156
+ // Test with() - returns transaction report
157
+ Object txReport = Datahike.with(db, vec(
158
+ map(kwd(":db/id"), -1, kwd(":name"), "David", kwd(":age"), 40L)));
159
+ assertNotNull(txReport);
160
+
161
+ // Transaction report should be a map
162
+ assertTrue(txReport instanceof Map);
163
+ Map<?, ?> reportMap = (Map<?, ?>) txReport;
164
+
165
+ // Should contain db-after
166
+ assertTrue(reportMap.containsKey(kwd(":db-after")));
167
+ }
168
+
169
+ @Test
170
+ public void testTransactAsync() throws Exception {
171
+ // Test transactAsync (transact!)
172
+ Object futureResult = Datahike.transactAsync(conn, vec(
173
+ map(kwd(":db/id"), -1, kwd(":name"), "Eve", kwd(":age"), 28L)));
174
+ assertNotNull(futureResult);
175
+
176
+ // It should return a future/promise
177
+ // We can deref it to get the transaction report
178
+ Object txReport = Util.derefFn.invoke(futureResult);
179
+ assertNotNull(txReport);
180
+ assertTrue(txReport instanceof Map);
181
+
182
+ // Verify the data was transacted
183
+ Object db = Datahike.db(conn);
184
+ Set res = (Set) Datahike.q("[:find ?n :where [?e :name \"Eve\"] [?e :name ?n]]", db);
185
+ assertEquals(1, res.size());
186
+ }
187
+
188
+ @Test
189
+ public void testLoadEntities() {
190
+ // Test bulk loading entities
191
+ List entities = vec(
192
+ map(kwd(":db/id"), -1, kwd(":name"), "Frank", kwd(":age"), 45L),
193
+ map(kwd(":db/id"), -2, kwd(":name"), "Grace", kwd(":age"), 32L),
194
+ map(kwd(":db/id"), -3, kwd(":name"), "Henry", kwd(":age"), 27L));
195
+
196
+ Object result = Datahike.loadEntities(conn, entities);
197
+ assertNotNull(result);
198
+ // loadEntities is a bulk operation - just verify it doesn't throw
199
+ }
200
+
201
+ @Test
202
+ public void testIndexRange() {
203
+ // index-range requires indexed attributes
204
+ // Skip for now - complex to set up, better tested in Clojure tests
205
+ // Just verify method is accessible via compilation
206
+ assertTrue(true);
207
+ }
208
+
209
+ @Test
210
+ public void testListenAndUnlisten() {
211
+ // Create a simple listener that captures reports
212
+ final List<Object> capturedReports = new ArrayList<>();
213
+ Object listener = Clojure.read("(fn [report] nil)");
214
+
215
+ // Test listen with key
216
+ Object listenResult = Datahike.listen(conn, kwd(":test-listener"), listener);
217
+ assertNotNull(listenResult);
218
+
219
+ // Test unlisten
220
+ Map<?, ?> unlistenResult = Datahike.unlisten(conn, kwd(":test-listener"));
221
+ assertNotNull(unlistenResult);
222
+ }
223
+
224
+ @Test
225
+ public void testConnectOverloads() {
226
+ // Test connect() with no args (uses default config)
227
+ Object defaultConn = null;
228
+ try {
229
+ // This will fail without a default config, but tests the method exists
230
+ defaultConn = Datahike.connect();
231
+ fail("Expected exception for missing default config");
232
+ } catch (Exception e) {
233
+ // Expected - no default config exists
234
+ assertTrue(true);
235
+ } finally {
236
+ if (defaultConn != null) {
237
+ Datahike.release(defaultConn);
238
+ }
239
+ }
240
+
241
+ // Test connect with Map (already tested in setUp)
242
+ Object conn2 = Datahike.connect(config);
243
+ assertNotNull(conn2);
244
+ Datahike.release(conn2);
245
+ }
246
+
247
+ @Test
248
+ public void testDatabaseExistsOverloads() {
249
+ // Test with config
250
+ assertTrue(Datahike.databaseExists(config));
251
+
252
+ // Test without args (default config)
253
+ try {
254
+ Datahike.databaseExists();
255
+ // May succeed or fail depending on default config
256
+ } catch (Exception e) {
257
+ // Expected if no default config
258
+ assertTrue(true);
259
+ }
260
+ }
261
+
262
+ @Test
263
+ public void testCreateDatabaseOverload() {
264
+ Map<String, Object> newConfig = new HashMap<>();
265
+ Map<String, Object> newStore = new HashMap<>();
266
+ newStore.put("backend", kwd(":memory"));
267
+ newStore.put("id", UUID.randomUUID());
268
+ newConfig.put("store", newStore);
269
+
270
+ // Test createDatabase with config
271
+ Object result = Datahike.createDatabase(newConfig);
272
+ assertNotNull(result);
273
+ assertTrue(Datahike.databaseExists(newConfig));
274
+
275
+ Datahike.deleteDatabase(newConfig);
276
+ }
277
+
278
+ @Test
279
+ public void testPullOverloads() {
280
+ Object db = Datahike.db(conn);
281
+
282
+ // Test pull with pattern as string (convenience method)
283
+ Map<?, ?> result1 = Datahike.pull(db, "[:db/id :name :age]", 1);
284
+ assertNotNull(result1);
285
+ assertEquals("Alice", result1.get(kwd(":name")));
286
+
287
+ // Test pull with pattern as List (generated method)
288
+ Map<?, ?> result2 = Datahike.pull(db, vec(kwd(":db/id"), kwd(":name")), (Object) 1);
289
+ assertNotNull(result2);
290
+ assertEquals("Alice", result2.get(kwd(":name")));
291
+ }
292
+
293
+ @Test
294
+ public void testSeekDatomsOverloads() {
295
+ Object db = Datahike.db(conn);
296
+
297
+ // Test seekdatoms convenience method (from Datahike.java)
298
+ Iterable<?> result1 = Datahike.seekdatoms(db, kwd(":eavt"), 1);
299
+ assertNotNull(result1);
300
+ assertTrue(result1.iterator().hasNext());
301
+
302
+ // Test with multiple components
303
+ Iterable<?> result2 = Datahike.seekdatoms(db, kwd(":eavt"), 1, kwd(":name"));
304
+ assertNotNull(result2);
305
+ }
306
+
307
+ @Test
308
+ public void testTempidOverloads() {
309
+ // Test tempid with partition only
310
+ Object tid1 = Datahike.tempid(kwd(":db.part/user"));
311
+ assertNotNull(tid1);
312
+ assertTrue(((Number) tid1).longValue() < 0);
313
+
314
+ // Test tempid with partition and specific id
315
+ Object tid2 = Datahike.tempid(kwd(":db.part/user"), -5000);
316
+ assertNotNull(tid2);
317
+ assertEquals(-5000L, ((Number) tid2).longValue());
318
+ }
319
+
320
+ @Test
321
+ public void testWithOverloads() {
322
+ Object db = Datahike.db(conn);
323
+
324
+ // Test with(db, txData) - 2 args
325
+ Object report1 = Datahike.with(db, vec(
326
+ map(kwd(":db/id"), -1, kwd(":name"), "Test1", kwd(":age"), 50L)));
327
+ assertNotNull(report1);
328
+
329
+ // with() method with tx-meta is tested but requires schema - skip for simplicity
330
+ // Core functionality is covered above
331
+ }
332
+
333
+ @Test
334
+ public void testMapToPersistentMapConversion() {
335
+ // Verify that our Java Map config is properly converted
336
+ // This is tested implicitly in setUp() but let's be explicit
337
+
338
+ Map<String, Object> javaConfig = new HashMap<>();
339
+ Map<String, Object> javaStore = new HashMap<>();
340
+ javaStore.put(":backend", kwd(":memory"));
341
+ javaStore.put(":id", UUID.randomUUID());
342
+ javaConfig.put(":store", javaStore);
343
+
344
+ // This should work with keyword strings
345
+ Datahike.createDatabase(javaConfig);
346
+ assertTrue(Datahike.databaseExists(javaConfig));
347
+ Datahike.deleteDatabase(javaConfig);
348
+ }
349
+ }