remult 0.22.2 → 0.22.3

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 (255) hide show
  1. package/esm/graphql.js +27 -27
  2. package/esm/postgres/schema-builder.js +4 -4
  3. package/esm/remult-knex/index.js +2 -2
  4. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +10 -0
  5. package/esm/src/id-entity.d.ts +4 -0
  6. package/esm/src/id-entity.js +8 -0
  7. package/esm/src/remult3/RepositoryImplementation.js +7 -5
  8. package/esm/src/shared-tests/db-tests.db-tests.js +35 -0
  9. package/package.json +1 -1
  10. package/postgres/postgresColumnSyntax.d.ts +2 -0
  11. package/postgres/postgresColumnSyntax.js +34 -0
  12. package/remult-knex/index.js +2 -2
  13. package/remult-middleware.d.ts +2 -0
  14. package/remult-middleware.js +70 -0
  15. package/server/register-actions-on-server.d.ts +3 -0
  16. package/server/register-actions-on-server.js +50 -0
  17. package/server/register-entities-on-server.d.ts +3 -0
  18. package/server/register-entities-on-server.js +19 -0
  19. package/src/backend-tests/backend-database-test-setup.backend-spec.js +10 -0
  20. package/{esm/core/src → src}/backend-tests/my-test.backend-spec.d.ts +1 -1
  21. package/src/backend-tests/my-test.backend-spec.js +217 -0
  22. package/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
  23. package/src/backend-tests/test-http-server.backend-spec.js +342 -0
  24. package/src/id-entity.d.ts +4 -0
  25. package/src/id-entity.js +17 -0
  26. package/src/remult3/RepositoryImplementation.js +15 -13
  27. package/src/shared-tests/db-tests.db-tests.js +64 -0
  28. package/{esm/core/src/valueConverters.d.ts → valueConverters.d.ts} +12 -13
  29. package/valueConverters.js +168 -0
  30. package/esm/angular/interfaces/index.d.ts +0 -1
  31. package/esm/angular/interfaces/index.js +0 -1
  32. package/esm/angular/interfaces/src/column-collection.d.ts +0 -70
  33. package/esm/angular/interfaces/src/column-collection.js +0 -341
  34. package/esm/angular/interfaces/src/data-area-settings.d.ts +0 -15
  35. package/esm/angular/interfaces/src/data-area-settings.js +0 -35
  36. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +0 -36
  37. package/esm/angular/interfaces/src/data-control-interfaces.js +0 -57
  38. package/esm/angular/interfaces/src/dataList.d.ts +0 -13
  39. package/esm/angular/interfaces/src/dataList.js +0 -42
  40. package/esm/angular/interfaces/src/filter-helper.d.ts +0 -13
  41. package/esm/angular/interfaces/src/filter-helper.js +0 -59
  42. package/esm/angular/interfaces/src/grid-settings.d.ts +0 -145
  43. package/esm/angular/interfaces/src/grid-settings.js +0 -387
  44. package/esm/angular/interfaces/src/public_api.d.ts +0 -4
  45. package/esm/angular/interfaces/src/public_api.js +0 -4
  46. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +0 -4
  47. package/esm/angular/src/angular/RemultAngularPluginsService.js +0 -3
  48. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +0 -49
  49. package/esm/angular/src/angular/data-control/data-control2.component.js +0 -138
  50. package/esm/core/SseSubscriptionServer.d.ts +0 -33
  51. package/esm/core/SseSubscriptionServer.js +0 -107
  52. package/esm/core/assign.d.ts +0 -1
  53. package/esm/core/assign.js +0 -5
  54. package/esm/core/classType.d.ts +0 -3
  55. package/esm/core/classType.js +0 -1
  56. package/esm/core/index.d.ts +0 -27
  57. package/esm/core/index.js +0 -25
  58. package/esm/core/inputTypes.d.ts +0 -9
  59. package/esm/core/inputTypes.js +0 -9
  60. package/esm/core/live-query/data-provider-live-query-storage.d.ts +0 -22
  61. package/esm/core/live-query/data-provider-live-query-storage.js +0 -71
  62. package/esm/core/postgres/index.d.ts +0 -2
  63. package/esm/core/postgres/index.js +0 -2
  64. package/esm/core/postgres/postgres-data-provider.d.ts +0 -36
  65. package/esm/core/postgres/postgres-data-provider.js +0 -120
  66. package/esm/core/postgres/schema-builder.d.ts +0 -17
  67. package/esm/core/postgres/schema-builder.js +0 -153
  68. package/esm/core/remult-fresh.d.ts +0 -17
  69. package/esm/core/remult-fresh.js +0 -29
  70. package/esm/core/remult-knex/index.d.ts +0 -30
  71. package/esm/core/remult-knex/index.js +0 -446
  72. package/esm/core/remult-mongo.d.ts +0 -24
  73. package/esm/core/remult-mongo.js +0 -254
  74. package/esm/core/server/JsonEntityFileStorage.d.ts +0 -10
  75. package/esm/core/server/JsonEntityFileStorage.js +0 -25
  76. package/esm/core/server/core.d.ts +0 -4
  77. package/esm/core/server/core.js +0 -4
  78. package/esm/core/server/expressBridge.d.ts +0 -182
  79. package/esm/core/server/expressBridge.js +0 -938
  80. package/esm/core/server/index.d.ts +0 -6
  81. package/esm/core/server/index.js +0 -9
  82. package/esm/core/server/initAsyncHooks.d.ts +0 -1
  83. package/esm/core/server/initAsyncHooks.js +0 -9
  84. package/esm/core/server/initDataProvider.d.ts +0 -2
  85. package/esm/core/server/initDataProvider.js +0 -14
  86. package/esm/core/src/__EntityValueProvider.d.ts +0 -11
  87. package/esm/core/src/__EntityValueProvider.js +0 -1
  88. package/esm/core/src/__RowsOfDataForTesting.d.ts +0 -3
  89. package/esm/core/src/__RowsOfDataForTesting.js +0 -1
  90. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
  91. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -147
  92. package/esm/core/src/backend-tests/my-test.backend-spec.js +0 -197
  93. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
  94. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +0 -167
  95. package/esm/core/src/buildRestDataProvider.d.ts +0 -31
  96. package/esm/core/src/buildRestDataProvider.js +0 -113
  97. package/esm/core/src/column-interfaces.d.ts +0 -154
  98. package/esm/core/src/column-interfaces.js +0 -7
  99. package/esm/core/src/column.d.ts +0 -58
  100. package/esm/core/src/column.js +0 -174
  101. package/esm/core/src/context.d.ts +0 -134
  102. package/esm/core/src/context.js +0 -286
  103. package/esm/core/src/data-api.d.ts +0 -39
  104. package/esm/core/src/data-api.js +0 -279
  105. package/esm/core/src/data-interfaces.d.ts +0 -41
  106. package/esm/core/src/data-interfaces.js +0 -12
  107. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +0 -22
  108. package/esm/core/src/data-providers/array-entity-data-provider.js +0 -252
  109. package/esm/core/src/data-providers/in-memory-database.d.ts +0 -9
  110. package/esm/core/src/data-providers/in-memory-database.js +0 -14
  111. package/esm/core/src/data-providers/json-data-provider.d.ts +0 -12
  112. package/esm/core/src/data-providers/json-data-provider.js +0 -55
  113. package/esm/core/src/data-providers/rest-data-provider.d.ts +0 -49
  114. package/esm/core/src/data-providers/rest-data-provider.js +0 -256
  115. package/esm/core/src/data-providers/sql-database.d.ts +0 -33
  116. package/esm/core/src/data-providers/sql-database.js +0 -384
  117. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +0 -24
  118. package/esm/core/src/data-providers/web-sql-data-provider.js +0 -143
  119. package/esm/core/src/entity.d.ts +0 -91
  120. package/esm/core/src/entity.js +0 -1
  121. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -50
  122. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +0 -150
  123. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -1
  124. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +0 -1
  125. package/esm/core/src/filter/filter-interfaces.d.ts +0 -85
  126. package/esm/core/src/filter/filter-interfaces.js +0 -477
  127. package/esm/core/src/live-query/LiveQueryClient.d.ts +0 -20
  128. package/esm/core/src/live-query/LiveQueryClient.js +0 -188
  129. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +0 -5
  130. package/esm/core/src/live-query/SseSubscriptionClient.js +0 -86
  131. package/esm/core/src/live-query/SubscriptionChannel.d.ts +0 -72
  132. package/esm/core/src/live-query/SubscriptionChannel.js +0 -123
  133. package/esm/core/src/live-query/SubscriptionServer.d.ts +0 -53
  134. package/esm/core/src/live-query/SubscriptionServer.js +0 -111
  135. package/esm/core/src/live-query/live-query-tests.spec.d.ts +0 -6
  136. package/esm/core/src/live-query/live-query-tests.spec.js +0 -952
  137. package/esm/core/src/remult-proxy.d.ts +0 -35
  138. package/esm/core/src/remult-proxy.js +0 -113
  139. package/esm/core/src/remult3/DecoratorReplacer.d.ts +0 -10
  140. package/esm/core/src/remult3/DecoratorReplacer.js +0 -20
  141. package/esm/core/src/remult3/RepositoryImplementation.d.ts +0 -355
  142. package/esm/core/src/remult3/RepositoryImplementation.js +0 -2109
  143. package/esm/core/src/remult3/index.d.ts +0 -2
  144. package/esm/core/src/remult3/index.js +0 -2
  145. package/esm/core/src/remult3/remult3.d.ts +0 -395
  146. package/esm/core/src/remult3/remult3.js +0 -2
  147. package/esm/core/src/server-action.d.ts +0 -81
  148. package/esm/core/src/server-action.js +0 -394
  149. package/esm/core/src/shared-tests/db-tests-setup.d.ts +0 -32
  150. package/esm/core/src/shared-tests/db-tests-setup.js +0 -78
  151. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +0 -25
  152. package/esm/core/src/shared-tests/db-tests.db-tests.js +0 -810
  153. package/esm/core/src/shared-tests/deleteAll.d.ts +0 -2
  154. package/esm/core/src/shared-tests/deleteAll.js +0 -4
  155. package/esm/core/src/shared-tests/entityWithValidations.d.ts +0 -14
  156. package/esm/core/src/shared-tests/entityWithValidations.js +0 -43
  157. package/esm/core/src/shared-tests/index.d.ts +0 -4
  158. package/esm/core/src/shared-tests/index.js +0 -4
  159. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +0 -1
  160. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +0 -67
  161. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +0 -10
  162. package/esm/core/src/shared-tests/test-special-value.spec.js +0 -73
  163. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +0 -1
  164. package/esm/core/src/shared-tests/test-update-with-null.spec.js +0 -31
  165. package/esm/core/src/sort.d.ts +0 -16
  166. package/esm/core/src/sort.js +0 -103
  167. package/esm/core/src/sql-command.d.ts +0 -19
  168. package/esm/core/src/sql-command.js +0 -1
  169. package/esm/core/src/test.d.ts +0 -3
  170. package/esm/core/src/test.js +0 -12
  171. package/esm/core/src/tests/Done.d.ts +0 -5
  172. package/esm/core/src/tests/Done.js +0 -9
  173. package/esm/core/src/tests/RowProvider.spec.d.ts +0 -16
  174. package/esm/core/src/tests/RowProvider.spec.js +0 -631
  175. package/esm/core/src/tests/TestDataApiResponse.d.ts +0 -10
  176. package/esm/core/src/tests/TestDataApiResponse.js +0 -22
  177. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +0 -8
  178. package/esm/core/src/tests/basicRowFunctionality.spec.js +0 -2103
  179. package/esm/core/src/tests/c.d.ts +0 -8
  180. package/esm/core/src/tests/c.js +0 -13
  181. package/esm/core/src/tests/createData.d.ts +0 -7
  182. package/esm/core/src/tests/createData.js +0 -22
  183. package/esm/core/src/tests/d.d.ts +0 -6
  184. package/esm/core/src/tests/d.js +0 -11
  185. package/esm/core/src/tests/dWithPrefilter.d.ts +0 -7
  186. package/esm/core/src/tests/dWithPrefilter.js +0 -18
  187. package/esm/core/src/tests/entityForCustomFilter.d.ts +0 -16
  188. package/esm/core/src/tests/entityForCustomFilter.js +0 -33
  189. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +0 -5
  190. package/esm/core/src/tests/entityWithValidationsOnColumn.js +0 -13
  191. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +0 -4
  192. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +0 -37
  193. package/esm/core/src/tests/h.d.ts +0 -6
  194. package/esm/core/src/tests/h.js +0 -24
  195. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +0 -1
  196. package/esm/core/src/tests/remult-3-basic-tests.spec.js +0 -236
  197. package/esm/core/src/tests/remult-3-entities.d.ts +0 -23
  198. package/esm/core/src/tests/remult-3-entities.js +0 -39
  199. package/esm/core/src/tests/tasks.d.ts +0 -6
  200. package/esm/core/src/tests/tasks.js +0 -10
  201. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  202. package/esm/core/src/tests/test-context-as-storage.spec.js +0 -1
  203. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +0 -1
  204. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +0 -389
  205. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +0 -5
  206. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +0 -152
  207. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +0 -1
  208. package/esm/core/src/tests/test-decorator-precedence.spec.js +0 -38
  209. package/esm/core/src/tests/test-default-value.spec.d.ts +0 -1
  210. package/esm/core/src/tests/test-default-value.spec.js +0 -33
  211. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +0 -14
  212. package/esm/core/src/tests/test-entity-inheritance.spec.js +0 -82
  213. package/esm/core/src/tests/test-exceptions.spec.d.ts +0 -1
  214. package/esm/core/src/tests/test-exceptions.spec.js +0 -375
  215. package/esm/core/src/tests/test-json.spec.d.ts +0 -1
  216. package/esm/core/src/tests/test-json.spec.js +0 -115
  217. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +0 -9
  218. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +0 -809
  219. package/esm/core/src/tests/test-non-active-record.spec.d.ts +0 -1
  220. package/esm/core/src/tests/test-non-active-record.spec.js +0 -66
  221. package/esm/core/src/tests/test-object-column.spec.d.ts +0 -1
  222. package/esm/core/src/tests/test-object-column.spec.js +0 -189
  223. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +0 -1
  224. package/esm/core/src/tests/test-paged-foreach.spec.js +0 -328
  225. package/esm/core/src/tests/test-remult-angular.spec.d.ts +0 -1
  226. package/esm/core/src/tests/test-remult-angular.spec.js +0 -23
  227. package/esm/core/src/tests/test-server-controller.spec.d.ts +0 -7
  228. package/esm/core/src/tests/test-server-controller.spec.js +0 -489
  229. package/esm/core/src/tests/test-server-expressions.spec.d.ts +0 -1
  230. package/esm/core/src/tests/test-server-expressions.spec.js +0 -178
  231. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +0 -1
  232. package/esm/core/src/tests/test-server-method-on-entity.spec.js +0 -306
  233. package/esm/core/src/tests/test-sql-expression.spec.d.ts +0 -5
  234. package/esm/core/src/tests/test-sql-expression.spec.js +0 -205
  235. package/esm/core/src/tests/test-sql.spec.d.ts +0 -1
  236. package/esm/core/src/tests/test-sql.spec.js +0 -170
  237. package/esm/core/src/tests/test-subscribe.spec.d.ts +0 -1
  238. package/esm/core/src/tests/test-subscribe.spec.js +0 -135
  239. package/esm/core/src/tests/test-type-recovery.spec.d.ts +0 -1
  240. package/esm/core/src/tests/test-type-recovery.spec.js +0 -49
  241. package/esm/core/src/tests/test-where-api.spec.d.ts +0 -1
  242. package/esm/core/src/tests/test-where-api.spec.js +0 -434
  243. package/esm/core/src/tests/testHelper.spec.d.ts +0 -36
  244. package/esm/core/src/tests/testHelper.spec.js +0 -226
  245. package/esm/core/src/tests/testModel/models.d.ts +0 -16
  246. package/esm/core/src/tests/testModel/models.js +0 -25
  247. package/esm/core/src/validators.d.ts +0 -14
  248. package/esm/core/src/validators.js +0 -33
  249. package/esm/core/src/valueConverters.js +0 -197
  250. package/esm/core/urlBuilder.d.ts +0 -6
  251. package/esm/core/urlBuilder.js +0 -20
  252. package/esm/test-servers/shared/Task.d.ts +0 -9
  253. package/esm/test-servers/shared/Task.js +0 -32
  254. package/esm/test.d.ts +0 -5
  255. package/esm/test.js +0 -6
@@ -1,809 +0,0 @@
1
- import { Remult } from '../context';
2
- import { InMemoryDataProvider } from '../data-providers/in-memory-database';
3
- import { Field, Entity, EntityBase, Fields, getEntityRef } from '../remult3';
4
- import { entityFilterToJson, Filter } from '../filter/filter-interfaces';
5
- import { Language } from './RowProvider.spec';
6
- import { WebSqlDataProvider } from '../data-providers/web-sql-data-provider';
7
- import { SqlDatabase } from '../data-providers/sql-database';
8
- import { DataApi } from '../data-api';
9
- import { actionInfo } from '../server-action';
10
- import { Done } from './Done';
11
- import { TestDataApiResponse } from './TestDataApiResponse';
12
- import { h } from './h';
13
- @Entity('categories')
14
- class Categories extends EntityBase {
15
- @Fields.integer()
16
- id;
17
- @Fields.string()
18
- name;
19
- @Field(() => Language)
20
- language;
21
- @Fields.boolean()
22
- archive = false;
23
- }
24
- @Entity('suppliers')
25
- class Suppliers extends EntityBase {
26
- @Fields.string()
27
- supplierId;
28
- @Fields.string()
29
- name;
30
- }
31
- @Entity('products')
32
- class Products extends EntityBase {
33
- @Fields.integer()
34
- id;
35
- @Fields.string()
36
- name;
37
- @Field(() => Categories, {
38
- lazy: true
39
- })
40
- category;
41
- @Field(() => Suppliers)
42
- supplier;
43
- }
44
- @Entity('products')
45
- class ProductsEager extends EntityBase {
46
- @Fields.integer()
47
- id;
48
- @Fields.string()
49
- name;
50
- @Field(() => Categories)
51
- category;
52
- }
53
- @Entity('profile')
54
- class profile extends EntityBase {
55
- remult;
56
- @Fields.string()
57
- id;
58
- async rel() {
59
- return this.remult.repo(following).findFirst({ id: '1', profile: this }, {
60
- createIfNotFound: true
61
- });
62
- }
63
- @Fields.boolean({
64
- serverExpression: async (self) => {
65
- await self.rel();
66
- return false;
67
- }
68
- })
69
- following;
70
- constructor(remult) {
71
- super();
72
- this.remult = remult;
73
- }
74
- }
75
- @Entity('following')
76
- class following extends EntityBase {
77
- @Fields.string()
78
- id;
79
- @Field(() => profile)
80
- profile;
81
- }
82
- describe("many to one relation", () => {
83
- beforeEach(() => actionInfo.runningOnServer = true);
84
- afterEach(() => actionInfo.runningOnServer = false);
85
- it("xx", async () => {
86
- let mem = new InMemoryDataProvider();
87
- let remult = new Remult();
88
- remult.dataProvider = (mem);
89
- await remult.repo(profile).create({ id: '1' }).save();
90
- let p = await remult.repo(profile).findId('1');
91
- expect(p.following).toBe(false);
92
- });
93
- it("test that it is loaded to begin with", async () => {
94
- let mem = new InMemoryDataProvider();
95
- let remult = new Remult();
96
- remult.dataProvider = (mem);
97
- let category = await remult.repo(Categories).create({ id: 1, name: 'cat 1' }).save();
98
- await remult.repo(Products).create({ id: 1, name: 'p1', category }).save();
99
- remult.clearAllCache();
100
- let p = await remult.repo(ProductsEager).findId(1);
101
- expect(p.category.id).toBe(1);
102
- expect(p.$.category.getId()).toBe(1);
103
- });
104
- it("test repo save", async () => {
105
- let remult = new Remult(new InMemoryDataProvider);
106
- let category = await remult.repo(Categories).create({ id: 1, name: 'cat 1' }).save();
107
- let p = await remult.repo(Products).save({ name: 'p1', category });
108
- expect(p.category.id).toBe(1);
109
- });
110
- it("test repo save2", async () => {
111
- let remult = new Remult(new InMemoryDataProvider);
112
- let category = await remult.repo(Categories).create({ id: 1, name: 'cat 1' }).save();
113
- let p = await remult.repo(Products).create({ name: 'p1' }).save();
114
- expect(p.category).toBeNull();
115
- p = await remult.repo(Products).save({ id: 0, category });
116
- expect(p.category.id).toBe(1);
117
- expect(p.name).toBe('p1');
118
- });
119
- it("test that it is loaded onDemand", async () => {
120
- let mem = new InMemoryDataProvider();
121
- let remult = new Remult();
122
- remult.dataProvider = (mem);
123
- let category = await remult.repo(Categories).create({ id: 1, name: 'cat 1' }).save();
124
- await remult.repo(Products).create({ id: 1, name: 'p1', category }).save();
125
- remult.clearAllCache();
126
- let p = await remult.repo(ProductsEager).findId(1, { load: () => [] });
127
- expect(p.category).toBe(undefined);
128
- await p.$.category.load();
129
- expect(p.category.id).toBe(1);
130
- });
131
- it("test that it is loaded onDemand", async () => {
132
- let mem = new InMemoryDataProvider();
133
- let remult = new Remult();
134
- remult.dataProvider = (mem);
135
- let category = await remult.repo(Categories).create({ id: 1, name: 'cat 1' }).save();
136
- await remult.repo(Products).create({ id: 1, name: 'p1', category }).save();
137
- remult.clearAllCache();
138
- let p = await remult.repo(ProductsEager).findFirst({ id: 1 }, {
139
- load: () => []
140
- });
141
- expect(p.category).toBe(undefined);
142
- await p.$.category.load();
143
- expect(p.category.id).toBe(1);
144
- });
145
- it("what", async () => {
146
- let mem = new InMemoryDataProvider();
147
- let remult = new Remult();
148
- remult.dataProvider = (mem);
149
- let cat = remult.repo(Categories).create();
150
- cat.id = 1;
151
- cat.name = "cat 1";
152
- await cat.save();
153
- let p = remult.repo(Products).create();
154
- p.id = 10;
155
- p.name = "prod 10";
156
- p.category = cat;
157
- expect(p.category.id).toBe(1, "right after set");
158
- // expect(p.category.name).toBe("cat 1", "right after set");
159
- await p.$.category.load();
160
- expect(p.category.name).toBe("cat 1", "after set and wait load");
161
- await p.save();
162
- expect(p.category.name).toBe("cat 1", "after save");
163
- expect(mem.rows[remult.repo(Products).metadata.key][0].category).toBe(1);
164
- expect(p._.toApiJson().category).toBe(1, "to api pojo");
165
- p = await remult.repo(Products).findFirst();
166
- expect(p.id).toBe(10);
167
- expect(p.category.id).toBe(1);
168
- await p.$.category.load();
169
- expect(p.category.name).toBe("cat 1");
170
- expect((await p.$.name.load())).toBe("prod 10");
171
- expect(await remult.repo(Products).count({ category: cat })).toBe(1);
172
- let c2 = remult.repo(Categories).create();
173
- c2.id = 2;
174
- c2.name = "cat 2";
175
- await c2.save();
176
- expect(p._.wasChanged()).toBe(false, "x");
177
- expect(p.$.category.valueChanged()).toBe(false, "y");
178
- p.category = c2;
179
- expect(p._.wasChanged()).toBe(true);
180
- expect(p.$.category.valueChanged()).toBe(true);
181
- expect(p.$.category.value.id).toBe(2);
182
- expect(p.$.category.originalValue.id).toBe(1);
183
- await p.save();
184
- expect(p._.wasChanged()).toBe(false, "a");
185
- expect(p.$.category.valueChanged()).toBe(false);
186
- expect(p.$.category.value.id).toBe(2);
187
- expect(p.$.category.originalValue.id).toBe(2);
188
- p.category = null;
189
- await p.save();
190
- expect(p.$.category.inputValue).toBeNull();
191
- p.category = cat;
192
- expect(p.$.category.inputValue).toBe("1");
193
- p.$.category.inputValue = "2";
194
- expect(p.category).toBe(c2);
195
- });
196
- it("test wait load", async () => {
197
- let mem = new InMemoryDataProvider();
198
- let remult = new Remult();
199
- remult.dataProvider = (mem);
200
- let cat = remult.repo(Categories).create();
201
- cat.id = 1;
202
- cat.name = "cat 1";
203
- await cat.save();
204
- let c2 = remult.repo(Categories).create();
205
- c2.id = 2;
206
- c2.name = "cat 2";
207
- await c2.save();
208
- let p = remult.repo(Products).create();
209
- p.id = 10;
210
- p.name = "prod 10";
211
- p.category = cat;
212
- await p.save();
213
- remult = new Remult();
214
- remult.dataProvider = (mem);
215
- p = await remult.repo(Products).findFirst();
216
- p.category = c2;
217
- await p.$.category.load();
218
- expect(p.category.name).toBe("cat 2");
219
- expect(p.$.category.value.name).toBe("cat 2");
220
- expect(p.$.category.originalValue.name).toBe("cat 1");
221
- });
222
- it("test null", async () => {
223
- let mem = new InMemoryDataProvider();
224
- let remult = new Remult();
225
- remult.dataProvider = (mem);
226
- let p = remult.repo(Products).create();
227
- p.id = 10;
228
- p.name = "prod 10";
229
- expect(p.category).toBe(null);
230
- expect(p.category === undefined).toBe(false);
231
- expect(p.category === null).toBe(true);
232
- expect(null == undefined).toBe(true);
233
- //expect(p.category==undefined).toBe(false);
234
- expect(p.category == null).toBe(true);
235
- await p.save();
236
- p = await remult.repo(Products).findFirst();
237
- expect(p.category).toBe(null);
238
- expect(await remult.repo(Products).count({ category: null })).toBe(1);
239
- });
240
- it("test stages", async () => {
241
- let mem = new InMemoryDataProvider();
242
- let remult = new Remult();
243
- remult.dataProvider = (mem);
244
- let p = remult.repo(Products).create();
245
- p.id = 10;
246
- p.name = "prod 10";
247
- let c = remult.repo(Categories).create();
248
- c.id = 1;
249
- c.name = "cat 1";
250
- await c.save();
251
- p.category = c;
252
- await p.save();
253
- remult = new Remult();
254
- remult.dataProvider = (mem);
255
- p = await remult.repo(Products).findFirst();
256
- expect(p.category).toBeUndefined();
257
- expect(p.category === undefined).toBe(true);
258
- expect(p.category === null).toBe(false);
259
- await p.$.category.load();
260
- expect(p.category.name).toBe("cat 1");
261
- });
262
- it("test update from api", async () => {
263
- let mem = new InMemoryDataProvider();
264
- let remult = new Remult();
265
- remult.dataProvider = (mem);
266
- let p = remult.repo(Products).create();
267
- p.id = 10;
268
- p.name = "prod 10";
269
- let c = remult.repo(Categories).create();
270
- c.id = 1;
271
- c.name = "cat 1";
272
- await c.save();
273
- await p.save();
274
- expect(p.category).toBeNull();
275
- p._._updateEntityBasedOnApi({ category: 1 });
276
- expect(p.$.category.inputValue).toBe('1');
277
- await p.$.category.load();
278
- expect(p.category.id).toBe(c.id);
279
- });
280
- it("test easy create", async () => {
281
- let mem = new InMemoryDataProvider();
282
- let remult = new Remult();
283
- remult.dataProvider = (mem);
284
- let c = await remult.repo(Categories).create({
285
- id: 1,
286
- name: 'cat 1'
287
- }).save();
288
- expect(c.id).toBe(1);
289
- expect(c.name).toBe('cat 1');
290
- let p = remult.repo(Products).create({
291
- id: 10,
292
- name: "prod 10",
293
- category: c
294
- });
295
- expect(p.category.id).toBe(1);
296
- await p.save();
297
- expect(p.category.id).toBe(1);
298
- });
299
- it("test filter create", async () => {
300
- let mem = new InMemoryDataProvider();
301
- let remult = new Remult();
302
- remult.dataProvider = (mem);
303
- let c = await remult.repo(Categories).create({
304
- id: 1,
305
- name: 'cat 1'
306
- }).save();
307
- let c2 = await remult.repo(Categories).create({
308
- id: 2,
309
- name: 'cat 2'
310
- }).save();
311
- let repo = remult.repo(Products);
312
- await repo.create({
313
- id: 10,
314
- name: "prod 10",
315
- category: c
316
- }).save();
317
- await repo.create({
318
- id: 11,
319
- name: "prod 1",
320
- category: c
321
- }).save();
322
- await repo.create({
323
- id: 12,
324
- name: "prod 12",
325
- category: c2
326
- }).save();
327
- await repo.create({
328
- id: 13,
329
- name: "prod 13",
330
- }).save();
331
- await repo.create({
332
- id: 14,
333
- name: "prod 14",
334
- }).save();
335
- await repo.create({
336
- id: 15,
337
- name: "prod 15",
338
- }).save();
339
- async function test(where, expected) {
340
- expect(await repo.count(where)).toBe(expected);
341
- function log(x) {
342
- return x;
343
- }
344
- expect(await repo.count(log(Filter.entityFilterFromJson(repo.metadata, log(entityFilterToJson(repo.metadata, where)))))).toBe(expected, "packed where");
345
- }
346
- await test({ category: c }, 2);
347
- await test({ category: null }, 3);
348
- await test({ category: c2 }, 1);
349
- });
350
- it("test that not too many reads are made", async () => {
351
- let mem = new InMemoryDataProvider();
352
- let remult = new Remult();
353
- remult.dataProvider = (mem);
354
- let cat = await remult.repo(Categories).create({
355
- id: 1, name: 'cat 2'
356
- }).save();
357
- let p = await remult.repo(Products).create({
358
- id: 10,
359
- name: "prod 10",
360
- category: cat
361
- }).save();
362
- let fetches = 0;
363
- remult = new Remult();
364
- remult.dataProvider = ({
365
- transaction: undefined,
366
- getEntityDataProvider: e => {
367
- let r = mem.getEntityDataProvider(e);
368
- return {
369
- find: x => {
370
- fetches++;
371
- return r.find(x);
372
- }, count: r.count, delete: r.delete, insert: r.insert, update: r.update
373
- };
374
- }
375
- });
376
- p = await remult.repo(Products).findFirst();
377
- expect(fetches).toBe(1);
378
- p._.toApiJson();
379
- expect(fetches).toBe(1);
380
- });
381
- it("test that not too many reads are made when getting multiple entities", async () => {
382
- let mem = new InMemoryDataProvider();
383
- let remult = new Remult(mem);
384
- await remult.repo(Products).create({
385
- id: 10,
386
- name: "prod 10",
387
- category: await remult.repo(Categories).create({
388
- id: 1, name: 'cat 1'
389
- }).save()
390
- }).save();
391
- await remult.repo(Products).create({
392
- id: 11,
393
- name: "prod 11",
394
- category: await remult.repo(Categories).create({
395
- id: 2, name: 'cat 2'
396
- }).save()
397
- }).save();
398
- await remult.repo(Products).create({
399
- id: 12,
400
- name: "prod 12",
401
- category: await remult.repo(Categories).create({
402
- id: 3, name: 'cat 3'
403
- }).save()
404
- }).save();
405
- let fetches = 0;
406
- remult = new Remult();
407
- remult.dataProvider = ({
408
- transaction: undefined,
409
- getEntityDataProvider: e => {
410
- let r = mem.getEntityDataProvider(e);
411
- return {
412
- find: x => {
413
- fetches++;
414
- return r.find(x);
415
- }, count: r.count, delete: r.delete, insert: r.insert, update: r.update
416
- };
417
- }
418
- });
419
- let r = await remult.repo(Products).find({ load: x => [x.category] });
420
- expect(fetches).toBe(2);
421
- for (const z of r) {
422
- await z.$.category.load();
423
- }
424
- expect(fetches).toBe(2);
425
- });
426
- it("test update only updates what's needed", async () => {
427
- let mem = new InMemoryDataProvider();
428
- let remult = new Remult();
429
- remult.dataProvider = (mem);
430
- let cat = await remult.repo(Categories).create({
431
- id: 1, name: 'cat 2'
432
- }).save();
433
- let p = await remult.repo(Products).create({
434
- id: 10,
435
- name: "prod 10",
436
- category: cat
437
- }).save();
438
- let d = new Done();
439
- remult.dataProvider = ({
440
- transaction: undefined,
441
- getEntityDataProvider: e => {
442
- let r = mem.getEntityDataProvider(e);
443
- return {
444
- find: x => r.find(x), count: r.count, delete: r.delete, insert: r.insert, update: (id, data) => {
445
- d.ok();
446
- expect(data).toEqual({ name: "prod 11" });
447
- return r.update(id, data);
448
- }
449
- };
450
- }
451
- });
452
- p = await remult.repo(Products).findFirst();
453
- p.name = "prod 11";
454
- await p.save();
455
- d.test();
456
- });
457
- it("test is null doesn't invoke read", async () => {
458
- let mem = new InMemoryDataProvider();
459
- let remult = new Remult();
460
- remult.dataProvider = (mem);
461
- let cat = await remult.repo(Categories).create({
462
- id: 1, name: 'cat 1'
463
- }).save();
464
- let p = await remult.repo(Products).create({
465
- id: 10,
466
- name: "prod 10",
467
- category: cat
468
- }).save();
469
- let fetches = 0;
470
- await remult.repo(Categories).create({ id: 2, name: 'cat2' }).save();
471
- await remult.repo(Categories).create({ id: 3, name: 'cat3' }).save();
472
- remult = new Remult();
473
- remult.dataProvider = ({
474
- transaction: undefined,
475
- getEntityDataProvider: e => {
476
- let r = mem.getEntityDataProvider(e);
477
- return {
478
- find: x => {
479
- fetches++;
480
- return r.find(x);
481
- }, count: r.count, delete: r.delete, insert: r.insert, update: r.update
482
- };
483
- }
484
- });
485
- p = await remult.repo(Products).findFirst();
486
- expect(fetches).toBe(1);
487
- expect(p.$.category.valueIsNull()).toBe(false);
488
- expect(fetches).toBe(1);
489
- await p.$.category.load();
490
- expect(fetches).toBe(2);
491
- p.category = 2;
492
- expect(fetches).toBe(2);
493
- await p.$.category.load();
494
- expect(fetches).toBe(3);
495
- expect(p.category.name).toBe("cat2");
496
- p.$.category.setId(3);
497
- expect(fetches).toBe(3);
498
- await p.$.category.load();
499
- expect(fetches).toBe(4);
500
- expect(p.category.name).toBe("cat3");
501
- });
502
- it("test to and from json ", async () => {
503
- let mem = new InMemoryDataProvider();
504
- let remult = new Remult();
505
- remult.dataProvider = (mem);
506
- let cat = await remult.repo(Categories).create({
507
- id: 1, name: 'cat 2', language: Language.Russian
508
- }).save();
509
- let json = cat._.toApiJson();
510
- let x = await remult.repo(Categories).fromJson(json);
511
- expect(x.isNew()).toBe(false);
512
- expect(x.language).toBe(Language.Russian);
513
- expect(x.archive).toBe(false);
514
- x.name = 'cat 3';
515
- await x.save();
516
- let rows = await remult.repo(Categories).find();
517
- expect(rows.length).toBe(1);
518
- expect(rows[0].name).toBe('cat 3');
519
- });
520
- it("test to and from json 2", async () => {
521
- let mem = new InMemoryDataProvider();
522
- let remult = new Remult();
523
- remult.dataProvider = (mem);
524
- let cat = await remult.repo(Categories).create({
525
- id: 1, name: 'cat 2'
526
- }).save();
527
- let p = await remult.repo(Products).create({ id: 10, name: 'p1' }).save();
528
- let json = p._.toApiJson();
529
- let x = await remult.repo(Products).fromJson(json);
530
- expect(x.isNew()).toBe(false);
531
- await p.$.category.load();
532
- expect(p.category).toBe(null);
533
- p.category = cat;
534
- await p.save();
535
- json = p._.toApiJson();
536
- x = await remult.repo(Products).fromJson(json);
537
- expect(x.isNew()).toBe(false);
538
- await p.$.category.load();
539
- expect(p.category.id).toBe(cat.id);
540
- });
541
- it("test to and from json 2", async () => {
542
- let mem = new InMemoryDataProvider();
543
- let remult = new Remult();
544
- remult.dataProvider = (mem);
545
- let cat = await (await remult.repo(Categories).fromJson({
546
- id: 1, name: 'cat 2'
547
- }, true)).save();
548
- expect(await remult.repo(Categories).count()).toBe(1);
549
- });
550
- it("test lookup with create", async () => {
551
- let mem = new InMemoryDataProvider();
552
- let remult = new Remult();
553
- remult.dataProvider = (mem);
554
- let cat = await remult.repo(Categories).create({
555
- id: 1, name: 'cat 2'
556
- }).save();
557
- let p = await remult.repo(Products).findFirst({ id: 10, category: cat }, { createIfNotFound: true });
558
- expect(p.isNew()).toBe(true);
559
- expect(p.id).toBe(10);
560
- expect((await p.$.category.load()).id).toBe(cat.id);
561
- });
562
- it("test set with id", async () => {
563
- let mem = new InMemoryDataProvider();
564
- let remult = new Remult();
565
- remult.dataProvider = (mem);
566
- let cat = await remult.repo(Categories).create({
567
- id: 1, name: 'cat 2'
568
- }).save();
569
- let p = remult.repo(Products).create({
570
- id: 10,
571
- category: 1
572
- });
573
- expect(p.id).toBe(10);
574
- expect((await p.$.category.load()).id).toBe(cat.id);
575
- });
576
- it("test set with json object", async () => {
577
- let mem = new InMemoryDataProvider();
578
- let remult = new Remult();
579
- remult.dataProvider = (mem);
580
- let cat = await remult.repo(Categories).create({
581
- id: 1, name: 'cat 2'
582
- }).save();
583
- let p = remult.repo(Products).create({
584
- id: 10,
585
- category: cat._.toApiJson()
586
- });
587
- expect(p.id).toBe(10);
588
- expect((await p.$.category.load()).id).toBe(cat.id);
589
- expect((await p.$.category.load()).isNew()).toBe(false);
590
- });
591
- it("test relation in sql", async () => {
592
- var wsql = new WebSqlDataProvider("test2");
593
- let db = new SqlDatabase(wsql);
594
- let remult = new Remult();
595
- remult.dataProvider = (db);
596
- for (const x of [Categories, Products, Suppliers]) {
597
- let e = remult.repo(x).metadata;
598
- await wsql.dropTable(e);
599
- await wsql.createTable(e);
600
- }
601
- let cat = await remult.repo(Categories).create({ id: 1, name: 'cat' }).save();
602
- let sup = await remult.repo(Suppliers).create({ supplierId: 'sup1', name: 'sup1name' }).save();
603
- let p = await remult.repo(Products).create({
604
- id: 10,
605
- name: 'prod',
606
- category: cat,
607
- supplier: sup
608
- }).save();
609
- await p.$.category.load();
610
- expect(p.category.id).toBe(cat.id);
611
- let sqlr = (await db.execute("select category,supplier from products")).rows[0];
612
- expect(sqlr.category).toEqual('1.0');
613
- expect(sqlr.supplier).toBe('sup1');
614
- expect(await remult.repo(Products).count({ supplier: sup })).toBe(1);
615
- expect(await remult.repo(Products).count({ supplier: [sup] })).toBe(1);
616
- });
617
- it("test filter with id", async () => {
618
- let mem = new InMemoryDataProvider();
619
- let remult = new Remult();
620
- remult.dataProvider = (mem);
621
- const c1 = await remult.repo(Categories).create({ id: 1, name: 'cat 1' }).save();
622
- const c2 = await remult.repo(Categories).create({ id: 2, name: 'cat 2' }).save();
623
- const c3 = await remult.repo(Categories).create({ id: 3, name: 'cat 3' }).save();
624
- await remult.repo(Products).create({ id: 10, category: c1 }).save();
625
- await remult.repo(Products).create({ id: 20, category: c2 }).save();
626
- await remult.repo(Products).create({ id: 30, category: c3 }).save();
627
- expect(await remult.repo(Products).count({ category: { $id: 1 } })).toBe(1);
628
- expect(await remult.repo(Products).count({ category: { $id: [2, 3] } })).toBe(2);
629
- expect(await remult.repo(Products).count({ category: { $id: { $ne: 1 } } })).toBe(2);
630
- expect(await remult.repo(Products).count({ category: { $id: { $ne: [2, 3] } } })).toBe(1);
631
- expect(await remult.repo(Products).count({ category: { $id: { $in: [2, 3] } } })).toBe(2);
632
- expect(await remult.repo(Products).count({ category: { $id: { $nin: [2, 3] } } })).toBe(1);
633
- });
634
- it("test cache", async () => {
635
- const remult = new Remult(new InMemoryDataProvider());
636
- const cat = await remult.repo(Categories).insert({ id: 1, name: "c1", archive: true });
637
- cat["x"] = true;
638
- const p = await remult.repo(Products2).insert({ id: 1, name: "p1", cat });
639
- await p.$.cat.load();
640
- expect(p.cat["x"]).toBe(true);
641
- expect(p.cat.archive).toBe(true);
642
- });
643
- it("test cache2", async () => {
644
- const remult = new Remult(new InMemoryDataProvider());
645
- const cat = await remult.repo(Categories).insert({ id: 1, name: "c1", archive: true });
646
- cat["x"] = true;
647
- const p = await remult.repo(Products2).insert({ id: 1, name: "p1", cat: { id: 1, name: "b" } });
648
- await p.$.cat.load();
649
- expect(p.cat.archive).toBe(undefined);
650
- });
651
- });
652
- @Entity("products2")
653
- class Products2 extends EntityBase {
654
- @Fields.integer()
655
- id = 0;
656
- @Fields.string()
657
- name = '';
658
- @Field(() => Categories)
659
- cat;
660
- }
661
- let z;
662
- z = {
663
- id: 3,
664
- name: 'noam'
665
- };
666
- describe("Test entity relation and count finds", () => {
667
- it("test it", async () => {
668
- let mem = new InMemoryDataProvider();
669
- let c = new Remult();
670
- c.dataProvider = (mem);
671
- await c.repo(h).create({ id: '1' }).save();
672
- expect(mem.rows['h'][0]).toEqual({ id: '1', refH: '', refHId: '' });
673
- let countFind = 0;
674
- c = new Remult();
675
- c.dataProvider = ({
676
- transaction: mem.transaction,
677
- getEntityDataProvider: x => {
678
- let r = mem.getEntityDataProvider(x);
679
- return {
680
- count: r.count,
681
- delete: r.delete,
682
- insert: r.insert,
683
- update: r.update,
684
- find: (o) => {
685
- countFind++;
686
- return r.find(o);
687
- }
688
- };
689
- }
690
- });
691
- let h1 = await c.repo(h).findId('1');
692
- await h1.$.refH.load();
693
- expect(countFind).toBe(1);
694
- });
695
- it("test api", async () => {
696
- let mem = new InMemoryDataProvider();
697
- let c = new Remult();
698
- c.dataProvider = (mem);
699
- let a = await c.repo(h).create({ id: 'a' }).save();
700
- let b = await c.repo(h).create({ id: 'b' }).save();
701
- await c.repo(h).create({ id: 'd', refH: a }).save();
702
- c = new Remult(); //clear the cache;
703
- c.dataProvider = (mem);
704
- let api = new DataApi(c.repo(h), c);
705
- let t = new TestDataApiResponse();
706
- let done = new Done();
707
- t.success = d => {
708
- expect(d.id).toBe('d');
709
- expect(d.refH).toBe('b');
710
- expect(d.refHId).toBe('b');
711
- done.ok();
712
- };
713
- await api.put(t, 'd', { refH: 'b' });
714
- done.test();
715
- });
716
- it("test api get array doesn't load", async () => {
717
- let mem = new InMemoryDataProvider();
718
- let c = new Remult();
719
- c.dataProvider = (mem);
720
- let a = await c.repo(h).create({ id: 'a' }).save();
721
- let b = await c.repo(h).create({ id: 'b' }).save();
722
- await c.repo(h).create({ id: 'd', refH: a }).save();
723
- c = new Remult(); //clear the cache;
724
- let fetches = 0;
725
- c.dataProvider = ({
726
- transaction: undefined,
727
- getEntityDataProvider: e => {
728
- let r = mem.getEntityDataProvider(e);
729
- return {
730
- find: x => {
731
- fetches++;
732
- return r.find(x);
733
- }, count: r.count, delete: r.delete, insert: r.insert, update: r.update
734
- };
735
- }
736
- }); //clear the cache;
737
- let api = new DataApi(c.repo(h), c);
738
- let t = new TestDataApiResponse();
739
- let done = new Done();
740
- t.success = d => {
741
- done.ok();
742
- };
743
- await api.getArray(t, {
744
- get: (key) => {
745
- if (key == 'id')
746
- return 'd';
747
- }
748
- });
749
- done.test();
750
- expect(fetches).toBe(1);
751
- });
752
- });
753
- @Entity("testUpdateDate")
754
- export class testUpdateDate extends EntityBase {
755
- @Fields.integer()
756
- id;
757
- @Fields.date()
758
- date = new Date(176, 6, 16);
759
- }
760
- it("test that it doesn't save if it doesn't need to", async () => {
761
- let mem = new InMemoryDataProvider();
762
- let updates = 0;
763
- let repo = new Remult({
764
- transaction: undefined,
765
- getEntityDataProvider: e => {
766
- let r = mem.getEntityDataProvider(e);
767
- return {
768
- find: x => {
769
- return r.find(x);
770
- }, count: r.count, delete: r.delete, insert: x => r.insert(x), update: (id, x) => { updates++; return r.update(id, x); }
771
- };
772
- }
773
- }).repo(testUpdateDate);
774
- await Promise.all(await repo.find().then(x => x.map(y => repo.delete(y))));
775
- var r = await repo.create({ id: 1 }).save();
776
- expect(updates).toBe(0);
777
- await r.save();
778
- expect(updates).toBe(0);
779
- r.date = new Date(1978, 3, 15);
780
- await r.save();
781
- expect(updates).toBe(1);
782
- });
783
- it("test set uuid", async () => {
784
- const remult = new Remult(new InMemoryDataProvider());
785
- const x = await remult.repo(Contact).insert({ id: 'a', name: 'a' });
786
- expect(x.id).toBe('a');
787
- });
788
- @Entity("contact")
789
- class Contact {
790
- @Fields.uuid()
791
- id;
792
- @Fields.string()
793
- name = '';
794
- }
795
- @Entity("tag")
796
- class Tags {
797
- @Fields.uuid()
798
- id;
799
- @Field(() => Contact)
800
- contact;
801
- }
802
- describe("Test many to one without active record", () => {
803
- it("should work", async () => {
804
- const remult = new Remult(new InMemoryDataProvider());
805
- const c = await remult.repo(Contact).insert({ name: 'c1' });
806
- const t = await remult.repo(Tags).insert({ contact: c });
807
- expect(getEntityRef(t).fields.contact.getId()).toBe(c.id);
808
- });
809
- });