remult 0.22.1 → 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 (257) 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/remult-mongo.js +6 -6
  5. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +30 -0
  6. package/esm/src/id-entity.d.ts +4 -0
  7. package/esm/src/id-entity.js +8 -0
  8. package/esm/src/remult3/RepositoryImplementation.js +7 -5
  9. package/esm/src/shared-tests/db-tests.db-tests.js +35 -0
  10. package/package.json +1 -1
  11. package/postgres/postgresColumnSyntax.d.ts +2 -0
  12. package/postgres/postgresColumnSyntax.js +34 -0
  13. package/remult-knex/index.js +2 -2
  14. package/remult-middleware.d.ts +2 -0
  15. package/remult-middleware.js +70 -0
  16. package/remult-mongo.js +6 -6
  17. package/server/register-actions-on-server.d.ts +3 -0
  18. package/server/register-actions-on-server.js +50 -0
  19. package/server/register-entities-on-server.d.ts +3 -0
  20. package/server/register-entities-on-server.js +19 -0
  21. package/src/backend-tests/backend-database-test-setup.backend-spec.js +60 -0
  22. package/{esm/core/src → src}/backend-tests/my-test.backend-spec.d.ts +1 -1
  23. package/src/backend-tests/my-test.backend-spec.js +217 -0
  24. package/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
  25. package/src/backend-tests/test-http-server.backend-spec.js +342 -0
  26. package/src/id-entity.d.ts +4 -0
  27. package/src/id-entity.js +17 -0
  28. package/src/remult3/RepositoryImplementation.js +15 -13
  29. package/src/shared-tests/db-tests.db-tests.js +64 -0
  30. package/{esm/core/src/valueConverters.d.ts → valueConverters.d.ts} +12 -13
  31. package/valueConverters.js +168 -0
  32. package/esm/angular/interfaces/index.d.ts +0 -1
  33. package/esm/angular/interfaces/index.js +0 -1
  34. package/esm/angular/interfaces/src/column-collection.d.ts +0 -70
  35. package/esm/angular/interfaces/src/column-collection.js +0 -341
  36. package/esm/angular/interfaces/src/data-area-settings.d.ts +0 -15
  37. package/esm/angular/interfaces/src/data-area-settings.js +0 -35
  38. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +0 -36
  39. package/esm/angular/interfaces/src/data-control-interfaces.js +0 -57
  40. package/esm/angular/interfaces/src/dataList.d.ts +0 -13
  41. package/esm/angular/interfaces/src/dataList.js +0 -42
  42. package/esm/angular/interfaces/src/filter-helper.d.ts +0 -13
  43. package/esm/angular/interfaces/src/filter-helper.js +0 -59
  44. package/esm/angular/interfaces/src/grid-settings.d.ts +0 -145
  45. package/esm/angular/interfaces/src/grid-settings.js +0 -387
  46. package/esm/angular/interfaces/src/public_api.d.ts +0 -4
  47. package/esm/angular/interfaces/src/public_api.js +0 -4
  48. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +0 -4
  49. package/esm/angular/src/angular/RemultAngularPluginsService.js +0 -3
  50. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +0 -49
  51. package/esm/angular/src/angular/data-control/data-control2.component.js +0 -138
  52. package/esm/core/SseSubscriptionServer.d.ts +0 -33
  53. package/esm/core/SseSubscriptionServer.js +0 -107
  54. package/esm/core/assign.d.ts +0 -1
  55. package/esm/core/assign.js +0 -5
  56. package/esm/core/classType.d.ts +0 -3
  57. package/esm/core/classType.js +0 -1
  58. package/esm/core/index.d.ts +0 -27
  59. package/esm/core/index.js +0 -25
  60. package/esm/core/inputTypes.d.ts +0 -9
  61. package/esm/core/inputTypes.js +0 -9
  62. package/esm/core/live-query/data-provider-live-query-storage.d.ts +0 -22
  63. package/esm/core/live-query/data-provider-live-query-storage.js +0 -71
  64. package/esm/core/postgres/index.d.ts +0 -2
  65. package/esm/core/postgres/index.js +0 -2
  66. package/esm/core/postgres/postgres-data-provider.d.ts +0 -36
  67. package/esm/core/postgres/postgres-data-provider.js +0 -120
  68. package/esm/core/postgres/schema-builder.d.ts +0 -17
  69. package/esm/core/postgres/schema-builder.js +0 -153
  70. package/esm/core/remult-fresh.d.ts +0 -17
  71. package/esm/core/remult-fresh.js +0 -29
  72. package/esm/core/remult-knex/index.d.ts +0 -30
  73. package/esm/core/remult-knex/index.js +0 -446
  74. package/esm/core/remult-mongo.d.ts +0 -24
  75. package/esm/core/remult-mongo.js +0 -254
  76. package/esm/core/server/JsonEntityFileStorage.d.ts +0 -10
  77. package/esm/core/server/JsonEntityFileStorage.js +0 -25
  78. package/esm/core/server/core.d.ts +0 -4
  79. package/esm/core/server/core.js +0 -4
  80. package/esm/core/server/expressBridge.d.ts +0 -182
  81. package/esm/core/server/expressBridge.js +0 -938
  82. package/esm/core/server/index.d.ts +0 -6
  83. package/esm/core/server/index.js +0 -9
  84. package/esm/core/server/initAsyncHooks.d.ts +0 -1
  85. package/esm/core/server/initAsyncHooks.js +0 -9
  86. package/esm/core/server/initDataProvider.d.ts +0 -2
  87. package/esm/core/server/initDataProvider.js +0 -14
  88. package/esm/core/src/__EntityValueProvider.d.ts +0 -11
  89. package/esm/core/src/__EntityValueProvider.js +0 -1
  90. package/esm/core/src/__RowsOfDataForTesting.d.ts +0 -3
  91. package/esm/core/src/__RowsOfDataForTesting.js +0 -1
  92. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
  93. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -147
  94. package/esm/core/src/backend-tests/my-test.backend-spec.js +0 -197
  95. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
  96. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +0 -167
  97. package/esm/core/src/buildRestDataProvider.d.ts +0 -31
  98. package/esm/core/src/buildRestDataProvider.js +0 -113
  99. package/esm/core/src/column-interfaces.d.ts +0 -154
  100. package/esm/core/src/column-interfaces.js +0 -7
  101. package/esm/core/src/column.d.ts +0 -58
  102. package/esm/core/src/column.js +0 -174
  103. package/esm/core/src/context.d.ts +0 -134
  104. package/esm/core/src/context.js +0 -286
  105. package/esm/core/src/data-api.d.ts +0 -39
  106. package/esm/core/src/data-api.js +0 -279
  107. package/esm/core/src/data-interfaces.d.ts +0 -41
  108. package/esm/core/src/data-interfaces.js +0 -12
  109. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +0 -22
  110. package/esm/core/src/data-providers/array-entity-data-provider.js +0 -252
  111. package/esm/core/src/data-providers/in-memory-database.d.ts +0 -9
  112. package/esm/core/src/data-providers/in-memory-database.js +0 -14
  113. package/esm/core/src/data-providers/json-data-provider.d.ts +0 -12
  114. package/esm/core/src/data-providers/json-data-provider.js +0 -55
  115. package/esm/core/src/data-providers/rest-data-provider.d.ts +0 -49
  116. package/esm/core/src/data-providers/rest-data-provider.js +0 -256
  117. package/esm/core/src/data-providers/sql-database.d.ts +0 -33
  118. package/esm/core/src/data-providers/sql-database.js +0 -384
  119. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +0 -24
  120. package/esm/core/src/data-providers/web-sql-data-provider.js +0 -143
  121. package/esm/core/src/entity.d.ts +0 -91
  122. package/esm/core/src/entity.js +0 -1
  123. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -50
  124. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +0 -150
  125. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -1
  126. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +0 -1
  127. package/esm/core/src/filter/filter-interfaces.d.ts +0 -85
  128. package/esm/core/src/filter/filter-interfaces.js +0 -477
  129. package/esm/core/src/live-query/LiveQueryClient.d.ts +0 -20
  130. package/esm/core/src/live-query/LiveQueryClient.js +0 -188
  131. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +0 -5
  132. package/esm/core/src/live-query/SseSubscriptionClient.js +0 -86
  133. package/esm/core/src/live-query/SubscriptionChannel.d.ts +0 -72
  134. package/esm/core/src/live-query/SubscriptionChannel.js +0 -123
  135. package/esm/core/src/live-query/SubscriptionServer.d.ts +0 -53
  136. package/esm/core/src/live-query/SubscriptionServer.js +0 -111
  137. package/esm/core/src/live-query/live-query-tests.spec.d.ts +0 -6
  138. package/esm/core/src/live-query/live-query-tests.spec.js +0 -952
  139. package/esm/core/src/remult-proxy.d.ts +0 -35
  140. package/esm/core/src/remult-proxy.js +0 -113
  141. package/esm/core/src/remult3/DecoratorReplacer.d.ts +0 -10
  142. package/esm/core/src/remult3/DecoratorReplacer.js +0 -20
  143. package/esm/core/src/remult3/RepositoryImplementation.d.ts +0 -355
  144. package/esm/core/src/remult3/RepositoryImplementation.js +0 -2109
  145. package/esm/core/src/remult3/index.d.ts +0 -2
  146. package/esm/core/src/remult3/index.js +0 -2
  147. package/esm/core/src/remult3/remult3.d.ts +0 -395
  148. package/esm/core/src/remult3/remult3.js +0 -2
  149. package/esm/core/src/server-action.d.ts +0 -81
  150. package/esm/core/src/server-action.js +0 -394
  151. package/esm/core/src/shared-tests/db-tests-setup.d.ts +0 -32
  152. package/esm/core/src/shared-tests/db-tests-setup.js +0 -78
  153. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +0 -25
  154. package/esm/core/src/shared-tests/db-tests.db-tests.js +0 -810
  155. package/esm/core/src/shared-tests/deleteAll.d.ts +0 -2
  156. package/esm/core/src/shared-tests/deleteAll.js +0 -4
  157. package/esm/core/src/shared-tests/entityWithValidations.d.ts +0 -14
  158. package/esm/core/src/shared-tests/entityWithValidations.js +0 -43
  159. package/esm/core/src/shared-tests/index.d.ts +0 -4
  160. package/esm/core/src/shared-tests/index.js +0 -4
  161. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +0 -1
  162. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +0 -67
  163. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +0 -10
  164. package/esm/core/src/shared-tests/test-special-value.spec.js +0 -73
  165. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +0 -1
  166. package/esm/core/src/shared-tests/test-update-with-null.spec.js +0 -31
  167. package/esm/core/src/sort.d.ts +0 -16
  168. package/esm/core/src/sort.js +0 -103
  169. package/esm/core/src/sql-command.d.ts +0 -19
  170. package/esm/core/src/sql-command.js +0 -1
  171. package/esm/core/src/test.d.ts +0 -3
  172. package/esm/core/src/test.js +0 -12
  173. package/esm/core/src/tests/Done.d.ts +0 -5
  174. package/esm/core/src/tests/Done.js +0 -9
  175. package/esm/core/src/tests/RowProvider.spec.d.ts +0 -16
  176. package/esm/core/src/tests/RowProvider.spec.js +0 -631
  177. package/esm/core/src/tests/TestDataApiResponse.d.ts +0 -10
  178. package/esm/core/src/tests/TestDataApiResponse.js +0 -22
  179. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +0 -8
  180. package/esm/core/src/tests/basicRowFunctionality.spec.js +0 -2103
  181. package/esm/core/src/tests/c.d.ts +0 -8
  182. package/esm/core/src/tests/c.js +0 -13
  183. package/esm/core/src/tests/createData.d.ts +0 -7
  184. package/esm/core/src/tests/createData.js +0 -22
  185. package/esm/core/src/tests/d.d.ts +0 -6
  186. package/esm/core/src/tests/d.js +0 -11
  187. package/esm/core/src/tests/dWithPrefilter.d.ts +0 -7
  188. package/esm/core/src/tests/dWithPrefilter.js +0 -18
  189. package/esm/core/src/tests/entityForCustomFilter.d.ts +0 -16
  190. package/esm/core/src/tests/entityForCustomFilter.js +0 -33
  191. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +0 -5
  192. package/esm/core/src/tests/entityWithValidationsOnColumn.js +0 -13
  193. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +0 -4
  194. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +0 -37
  195. package/esm/core/src/tests/h.d.ts +0 -6
  196. package/esm/core/src/tests/h.js +0 -24
  197. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +0 -1
  198. package/esm/core/src/tests/remult-3-basic-tests.spec.js +0 -236
  199. package/esm/core/src/tests/remult-3-entities.d.ts +0 -23
  200. package/esm/core/src/tests/remult-3-entities.js +0 -39
  201. package/esm/core/src/tests/tasks.d.ts +0 -6
  202. package/esm/core/src/tests/tasks.js +0 -10
  203. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  204. package/esm/core/src/tests/test-context-as-storage.spec.js +0 -1
  205. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +0 -1
  206. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +0 -389
  207. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +0 -5
  208. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +0 -152
  209. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +0 -1
  210. package/esm/core/src/tests/test-decorator-precedence.spec.js +0 -38
  211. package/esm/core/src/tests/test-default-value.spec.d.ts +0 -1
  212. package/esm/core/src/tests/test-default-value.spec.js +0 -33
  213. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +0 -14
  214. package/esm/core/src/tests/test-entity-inheritance.spec.js +0 -82
  215. package/esm/core/src/tests/test-exceptions.spec.d.ts +0 -1
  216. package/esm/core/src/tests/test-exceptions.spec.js +0 -375
  217. package/esm/core/src/tests/test-json.spec.d.ts +0 -1
  218. package/esm/core/src/tests/test-json.spec.js +0 -115
  219. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +0 -9
  220. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +0 -809
  221. package/esm/core/src/tests/test-non-active-record.spec.d.ts +0 -1
  222. package/esm/core/src/tests/test-non-active-record.spec.js +0 -66
  223. package/esm/core/src/tests/test-object-column.spec.d.ts +0 -1
  224. package/esm/core/src/tests/test-object-column.spec.js +0 -189
  225. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +0 -1
  226. package/esm/core/src/tests/test-paged-foreach.spec.js +0 -328
  227. package/esm/core/src/tests/test-remult-angular.spec.d.ts +0 -1
  228. package/esm/core/src/tests/test-remult-angular.spec.js +0 -23
  229. package/esm/core/src/tests/test-server-controller.spec.d.ts +0 -7
  230. package/esm/core/src/tests/test-server-controller.spec.js +0 -489
  231. package/esm/core/src/tests/test-server-expressions.spec.d.ts +0 -1
  232. package/esm/core/src/tests/test-server-expressions.spec.js +0 -178
  233. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +0 -1
  234. package/esm/core/src/tests/test-server-method-on-entity.spec.js +0 -306
  235. package/esm/core/src/tests/test-sql-expression.spec.d.ts +0 -5
  236. package/esm/core/src/tests/test-sql-expression.spec.js +0 -205
  237. package/esm/core/src/tests/test-sql.spec.d.ts +0 -1
  238. package/esm/core/src/tests/test-sql.spec.js +0 -170
  239. package/esm/core/src/tests/test-subscribe.spec.d.ts +0 -1
  240. package/esm/core/src/tests/test-subscribe.spec.js +0 -135
  241. package/esm/core/src/tests/test-type-recovery.spec.d.ts +0 -1
  242. package/esm/core/src/tests/test-type-recovery.spec.js +0 -49
  243. package/esm/core/src/tests/test-where-api.spec.d.ts +0 -1
  244. package/esm/core/src/tests/test-where-api.spec.js +0 -434
  245. package/esm/core/src/tests/testHelper.spec.d.ts +0 -36
  246. package/esm/core/src/tests/testHelper.spec.js +0 -226
  247. package/esm/core/src/tests/testModel/models.d.ts +0 -16
  248. package/esm/core/src/tests/testModel/models.js +0 -25
  249. package/esm/core/src/validators.d.ts +0 -14
  250. package/esm/core/src/validators.js +0 -33
  251. package/esm/core/src/valueConverters.js +0 -197
  252. package/esm/core/urlBuilder.d.ts +0 -6
  253. package/esm/core/urlBuilder.js +0 -20
  254. package/esm/test-servers/shared/Task.d.ts +0 -9
  255. package/esm/test-servers/shared/Task.js +0 -32
  256. package/esm/test.d.ts +0 -5
  257. package/esm/test.js +0 -6
@@ -1,631 +0,0 @@
1
- import { InMemoryDataProvider } from '../data-providers/in-memory-database';
2
- import { ArrayEntityDataProvider } from "../data-providers/array-entity-data-provider";
3
- import { Allow, Remult } from '../context';
4
- import { OneToMany } from '../column';
5
- import { FilterConsumerBridgeToSqlRequest } from '../filter/filter-consumer-bridge-to-sql-request';
6
- import { Validators } from '../validators';
7
- import { Categories, Categories as newCategories } from './remult-3-entities';
8
- import { Entity as EntityDecorator, getEntityRef, decorateColumnSettings, Entity, Field, ValueListFieldType, Fields, getValueList, ValueListInfo } from '../remult3/RepositoryImplementation';
9
- import { describeClass, Sort } from '../..';
10
- import { EntityBase } from '../remult3';
11
- import { ValueConverters } from '../valueConverters';
12
- import { entityFilterToJson, Filter } from '../filter/filter-interfaces';
13
- import { createData } from './createData';
14
- @ValueListFieldType({
15
- getValues: () => [
16
- Language.Hebrew,
17
- Language.Russian,
18
- new Language(20, 'אמהרית')
19
- ]
20
- })
21
- export class Language {
22
- id;
23
- caption;
24
- static Hebrew = new Language(0, 'עברית');
25
- static Russian = new Language(10, 'רוסית');
26
- constructor(id, caption) {
27
- this.id = id;
28
- this.caption = caption;
29
- }
30
- }
31
- export async function insertFourRows() {
32
- return createData(async (i) => {
33
- await i(1, 'noam', 'x');
34
- await i(4, 'yael', 'x');
35
- await i(2, 'yoni', 'y');
36
- await i(3, 'maayan', 'y');
37
- });
38
- }
39
- ;
40
- describe("grid filter stuff", () => {
41
- it("filter with contains", async () => {
42
- let x = new FilterConsumerBridgeToSqlRequest({
43
- addParameterAndReturnSqlToken: () => ""
44
- }, {
45
- $entityName: '',
46
- $dbNameOf: () => 'col'
47
- });
48
- x.containsCaseInsensitive(new mockColumnDefs("col"), "no'am");
49
- expect(await x.resolveWhere()).toBe(" where lower (col) like lower ('%no''am%')");
50
- });
51
- it("filter with contains", async () => {
52
- let x = new FilterConsumerBridgeToSqlRequest({
53
- addParameterAndReturnSqlToken: () => ""
54
- }, {
55
- $entityName: '',
56
- $dbNameOf: () => 'col'
57
- });
58
- x.containsCaseInsensitive(new mockColumnDefs("col"), "no'a'm");
59
- expect(await x.resolveWhere()).toBe(" where lower (col) like lower ('%no''a''m%')");
60
- });
61
- it("test in statement", async () => {
62
- let [c] = await insertFourRows();
63
- expect(await c.count({ id: [1, 3] })).toBe(2);
64
- });
65
- });
66
- describe("Closed List column", () => {
67
- it("Basic Operations", () => {
68
- let x = ValueListInfo.get(Language);
69
- expect(x.fromJson(0)).toBe(Language.Hebrew);
70
- expect(x.toJson(Language.Russian)).toBe(10);
71
- expect(ValueListInfo.get(Language).getValues().length).toBe(3);
72
- });
73
- it("test auto caption", () => {
74
- let val = ValueListInfo.get(valueList);
75
- expect(valueList.firstName.caption).toBe('First Name');
76
- });
77
- it("test with entity", async () => {
78
- let c = new Remult()
79
- .repo(entityWithValueList, new InMemoryDataProvider());
80
- let e = c.create();
81
- e.id = 1;
82
- expect(e.l).toBe(Language.Hebrew);
83
- e.l = Language.Russian;
84
- await e._.save();
85
- e = await c.findFirst();
86
- expect(e.l).toBe(Language.Russian);
87
- expect(e._.toApiJson().l).toBe(10);
88
- });
89
- it("test with entity and data defined on type", async () => {
90
- let c = new Remult()
91
- .repo(entityWithValueList, new InMemoryDataProvider());
92
- let e = c.create();
93
- e.id = 1;
94
- expect(c.metadata.fields.v.valueType).toBe(valueList);
95
- expect(c.metadata.fields.v.valueConverter.fromJson('listName'))
96
- .toBe(valueList.listName);
97
- expect(c.metadata.fields.id.valueType).toBe(Number);
98
- expect(e.v).toBe(valueList.firstName);
99
- e.v = valueList.listName;
100
- await e._.save();
101
- e = await c.findFirst();
102
- expect(e.v).toBe(valueList.listName);
103
- expect(e._.toApiJson().v).toBe('listName');
104
- });
105
- it("test entity with value list get values", () => {
106
- var x = new Remult().repo(entityWithValueList);
107
- expect(getValueList(x.metadata.fields.l).length).toBe(3);
108
- expect(getValueList(x.create().$.l).length).toBe(3);
109
- });
110
- });
111
- @ValueListFieldType()
112
- class valueList {
113
- id;
114
- caption;
115
- static firstName = new valueList();
116
- static listName = new valueList();
117
- constructor(id, caption) {
118
- this.id = id;
119
- this.caption = caption;
120
- }
121
- }
122
- @Entity('entity with value list')
123
- class entityWithValueList extends EntityBase {
124
- @Fields.integer()
125
- id = 0;
126
- @Field(() => Language)
127
- l = Language.Hebrew;
128
- @Field(() => valueList)
129
- v = valueList.firstName;
130
- }
131
- describe("test row provider", () => {
132
- it("auto name", () => {
133
- var cat = new Remult().repo(newCategories).create();
134
- expect(cat._.repository.metadata.key).toBe('Categories');
135
- });
136
- it("test update", async () => {
137
- let [c] = await createData(async (insert) => await insert(5, 'noam'));
138
- let r = await c.find();
139
- expect(r[0].categoryName).toBe('noam');
140
- r[0].categoryName = 'yael';
141
- await r[0]._.save();
142
- r = await c.find();
143
- expect(r[0].categoryName).toBe('yael');
144
- });
145
- it("test filter", async () => {
146
- let [c] = await insertFourRows();
147
- let rows = await c.find();
148
- expect(rows.length).toBe(4);
149
- rows = await c.find({ where: { description: 'x' } });
150
- expect(rows.length).toBe(2);
151
- rows = await c.find({ where: { id: 4 } });
152
- expect(rows.length).toBe(1);
153
- expect(rows[0].categoryName).toBe('yael');
154
- rows = await c.find({ where: { description: 'y', categoryName: 'yoni' } });
155
- expect(rows.length).toBe(1);
156
- expect(rows[0].id).toBe(2);
157
- rows = await c.find({
158
- where: { description: 'y', categoryName: 'yoni' }
159
- });
160
- expect(rows.length).toBe(1);
161
- expect(rows[0].id).toBe(2);
162
- rows = await c.find({
163
- where: { description: 'y', categoryName: 'yoni' }
164
- });
165
- expect(rows.length).toBe(1);
166
- expect(rows[0].id).toBe(2);
167
- });
168
- it("test in filter packer", async () => {
169
- let [r] = await insertFourRows();
170
- let rows = await r.find();
171
- expect(rows.length).toBe(4);
172
- rows = await r.find({
173
- where: Filter.entityFilterFromJson(r.metadata, entityFilterToJson(r.metadata, { description: 'x' }))
174
- });
175
- rows = await r.find({ where: Filter.entityFilterFromJson(r.metadata, entityFilterToJson(r.metadata, { id: [1, 3] })) });
176
- expect(rows.length).toBe(2);
177
- rows = await r.find({ where: Filter.entityFilterFromJson(r.metadata, entityFilterToJson(r.metadata, { id: { $ne: [1, 2, 3] } })) });
178
- expect(rows.length).toBe(1);
179
- });
180
- it("sort", async () => {
181
- let [c] = await insertFourRows();
182
- let rows = await c.find({ orderBy: { id: "asc" } });
183
- expect(rows[0].id).toBe(1);
184
- expect(rows[1].id).toBe(2);
185
- expect(rows[2].id).toBe(3);
186
- expect(rows[3].id).toBe(4);
187
- rows = await c.find({
188
- orderBy: { categoryName: "desc" }
189
- });
190
- expect(rows[0].id).toBe(2);
191
- expect(rows[1].id).toBe(4);
192
- expect(rows[2].id).toBe(1);
193
- expect(rows[3].id).toBe(3);
194
- });
195
- it("counts", async () => {
196
- let [c] = await insertFourRows();
197
- let count = await c.count();
198
- expect(count).toBe(4);
199
- });
200
- it("counts with filter", async () => {
201
- let [c] = await insertFourRows();
202
- let count = await c.count({ id: { "<=": 2 } });
203
- expect(count).toBe(2);
204
- });
205
- it("Test Validation 2", async () => {
206
- var remult = new Remult();
207
- remult.dataProvider = (new InMemoryDataProvider());
208
- let type = class extends newCategories {
209
- a;
210
- };
211
- EntityDecorator('')(type);
212
- Fields.string({
213
- validate: (entity, col) => Validators.required(entity, col, "m")
214
- })(type.prototype, "a");
215
- var c = remult.repo(type);
216
- var cat = c.create();
217
- cat.a = '';
218
- var saved = false;
219
- try {
220
- await cat._.save();
221
- saved = true;
222
- }
223
- catch (err) {
224
- expect(cat._.fields.a.error).toEqual("m");
225
- expect(cat._.error).toBe("A: m");
226
- }
227
- expect(saved).toBe(false);
228
- });
229
- it("Test Validation 2_1", async () => {
230
- var remult = new Remult();
231
- remult.dataProvider = (new InMemoryDataProvider());
232
- let type = class extends newCategories {
233
- a;
234
- };
235
- EntityDecorator('')(type);
236
- Fields.string({
237
- validate: (entity, col) => {
238
- if (!entity.a || entity.a.length == 0)
239
- col.error = "m";
240
- }
241
- })(type.prototype, "a");
242
- var c = remult.repo(type);
243
- var cat = c.create();
244
- cat.a = '';
245
- var saved = false;
246
- try {
247
- await cat._.save();
248
- saved = true;
249
- }
250
- catch (err) {
251
- expect(cat._.fields.a.error).toEqual("m");
252
- }
253
- expect(saved).toBe(false);
254
- });
255
- it("Test Validation 3", async () => {
256
- var remult = new Remult();
257
- remult.dataProvider = (new InMemoryDataProvider());
258
- let type = class extends newCategories {
259
- a;
260
- };
261
- EntityDecorator('')(type);
262
- Fields.string({
263
- validate: Validators.required.withMessage("m")
264
- })(type.prototype, "a");
265
- var c = remult.repo(type);
266
- var cat = c.create();
267
- cat.a = '';
268
- var saved = false;
269
- try {
270
- await cat._.save();
271
- saved = true;
272
- }
273
- catch (err) {
274
- expect(cat._.fields.a.error).toEqual("m");
275
- expect(err.message).toBe("A: m");
276
- }
277
- expect(saved).toBe(false);
278
- });
279
- it("Test unique Validation and is not empty", async () => {
280
- var remult = new Remult();
281
- remult.dataProvider = (new InMemoryDataProvider());
282
- let type = class extends newCategories {
283
- a;
284
- };
285
- EntityDecorator('asdfa')(type);
286
- Fields.string({
287
- validate: [Validators.required, Validators.unique]
288
- })(type.prototype, "a");
289
- var c = remult.repo(type);
290
- var cat = c.create();
291
- var saved = false;
292
- cat.a = '';
293
- try {
294
- await cat._.save();
295
- saved = true;
296
- }
297
- catch {
298
- expect(cat._.fields.a.error).toEqual("Should not be empty");
299
- cat.a = '12';
300
- await cat._.save();
301
- }
302
- expect(saved).toBe(false);
303
- cat = c.create();
304
- cat.a = '12';
305
- try {
306
- await cat._.save();
307
- saved = true;
308
- }
309
- catch (err) {
310
- expect(cat._.fields.a.error).toEqual("already exists");
311
- }
312
- expect(saved).toBe(false);
313
- });
314
- it("test that it fails nicely", async () => {
315
- let c = (await insertFourRows())[0].create();
316
- c.id = 1;
317
- c.categoryName = 'bla bla';
318
- try {
319
- await c._.save();
320
- fail("Shouldnt have reached this");
321
- }
322
- catch (err) {
323
- }
324
- expect(c.categoryName).toBe('bla bla');
325
- });
326
- it("update should fail nicely", async () => {
327
- let cont = new Remult();
328
- cont.dataProvider = ({ getEntityDataProvider: (x) => new myDp(x), transaction: undefined });
329
- let c = cont.repo(newCategories).create();
330
- c.id = 1;
331
- c.categoryName = 'noam';
332
- await cont.repo(newCategories).save(c);
333
- c.categoryName = 'yael';
334
- try {
335
- await cont.repo(newCategories).save(c);
336
- fail("shouldnt be here");
337
- }
338
- catch (err) {
339
- expect(c.categoryName).toBe('yael');
340
- }
341
- });
342
- it("filter should return none", async () => {
343
- let [c] = await insertFourRows();
344
- let r = await c.findFirst({ categoryName: [] }, { createIfNotFound: true });
345
- expect(r.categoryName).toBe(undefined);
346
- expect(r.isNew()).toBe(true);
347
- });
348
- it("filter ignore works return none", async () => {
349
- let [c] = await insertFourRows();
350
- let r = await c.findFirst({ categoryName: undefined }, { createIfNotFound: true });
351
- expect(r.categoryName).toBe("noam");
352
- expect(r.isNew()).toBe(false);
353
- });
354
- it("lookup survives row that doesn't exist", async () => {
355
- let [c] = await createData(async (insert) => await insert(1, 'noam'));
356
- let r = await c.findId(5);
357
- expect(r).toBeUndefined();
358
- r = await c.findId(5);
359
- expect(r).toBeUndefined();
360
- });
361
- });
362
- @Entity('typeA', { dbName: 'dbnameA' })
363
- class typeA extends EntityBase {
364
- }
365
- @Entity('typeB')
366
- class typeB extends typeA {
367
- }
368
- describe("decorator inheritance", () => {
369
- it("entity extends", async () => {
370
- let c = new Remult();
371
- let defsA = c.repo(typeA).metadata;
372
- expect(defsA.key).toBe('typeA');
373
- expect((await defsA.getDbName())).toBe('dbnameA');
374
- let defsB = c.repo(typeB).metadata;
375
- expect(defsB.key).toBe("typeB");
376
- expect((await defsB.getDbName())).toBe("dbnameA");
377
- ;
378
- });
379
- });
380
- describe("order by api", () => {
381
- it("works with sort", () => {
382
- let c = new Remult().repo(Categories);
383
- let opt = { orderBy: { id: "asc" } };
384
- let s = Sort.translateOrderByToSort(c.metadata, opt.orderBy);
385
- expect(s.Segments.length).toBe(1);
386
- expect(s.Segments[0].field.key).toBe(c.metadata.fields.id.key);
387
- });
388
- it("works with columns array", () => {
389
- let c = new Remult().repo(Categories);
390
- let opt = {
391
- orderBy: {
392
- id: "asc",
393
- categoryName: "asc"
394
- }
395
- };
396
- let s = Sort.translateOrderByToSort(c.metadata, opt.orderBy);
397
- expect(s.Segments.length).toBe(2);
398
- expect(s.Segments[0].field).toBe(c.metadata.fields.id);
399
- expect(s.Segments[1].field).toBe(c.metadata.fields.categoryName);
400
- });
401
- it("test several sort options", async () => {
402
- let [c] = await createData(async (i) => {
403
- await i(1, 'z');
404
- await i(2, 'y');
405
- });
406
- let r = await c.find({ orderBy: { categoryName: "asc" } });
407
- expect(r.length).toBe(2);
408
- expect(r[0].id).toBe(2);
409
- r = await c.find({ orderBy: { categoryName: "asc" } });
410
- expect(r.length).toBe(2);
411
- expect(r[0].id).toBe(2);
412
- r = await c.find({ orderBy: { categoryName: "desc" } });
413
- expect(r.length).toBe(2);
414
- expect(r[0].id).toBe(1);
415
- });
416
- });
417
- describe("test datetime column", () => {
418
- it("stores well", () => {
419
- let col = decorateColumnSettings({ valueType: Date }, new Remult());
420
- let val = col.valueConverter.fromJson(col.valueConverter.toJson(new Date(1976, 11, 16, 8, 55, 31, 65)));
421
- expect(val.toISOString()).toBe(new Date(1976, 11, 16, 8, 55, 31, 65).toISOString());
422
- });
423
- it("stores well undefined", () => {
424
- let col = decorateColumnSettings({ valueType: Date }, new Remult());
425
- expect(col.valueConverter.toJson(undefined)).toBe('');
426
- });
427
- it("displays empty date well", () => {
428
- expect(ValueConverters.DateOnly.displayValue(ValueConverters.DateOnly.fromJson(''))).toBe('');
429
- });
430
- it("displays null date well 1", () => {
431
- expect(ValueConverters.DateOnly.toJson(null)).toBe(null);
432
- expect(ValueConverters.DateOnly.toJson(null)).toBe(null);
433
- expect(ValueConverters.DateOnly.displayValue(null)).toBe('');
434
- });
435
- it("displays empty date well empty", () => {
436
- expect(ValueConverters.DateOnly.displayValue(ValueConverters.DateOnly.fromJson('0000-00-00'))).toBe('');
437
- });
438
- it("Date only stuff", () => {
439
- function test(d, expected) {
440
- expect(ValueConverters.DateOnly.toJson(d)).toBe(expected);
441
- const ed = ValueConverters.DateOnly.fromJson(expected);
442
- expect(ed.getFullYear()).toEqual(d.getFullYear(), "year");
443
- expect(ed.getMonth()).toEqual(d.getMonth(), "month");
444
- expect(ed.getDate()).toEqual(d.getDate(), "day");
445
- }
446
- test(new Date(2021, 2, 26), '2021-03-26');
447
- test(new Date(2021, 9, 31), '2021-10-31');
448
- //test(new Date('1976-06-16'), '1976-06-16');
449
- //test(new Date('1976-6-16'), '1976-06-16');
450
- test(new Date(1976, 5, 16), '1976-06-16');
451
- test(new Date(2021, 9, 30), '2021-10-30');
452
- test(new Date(2021, 2, 26), '2021-03-26');
453
- "".toString();
454
- });
455
- it("test display value, from and to input", () => {
456
- let x = class {
457
- name = 'noam';
458
- myDate = new Date(1976, 5, 16);
459
- };
460
- describeClass(x, Entity("myEntity"), {
461
- name: Fields.string(),
462
- myDate: Fields.dateOnly({
463
- displayValue: z => z.name + z.myDate.getFullYear()
464
- })
465
- });
466
- var repo = new Remult().repo(x);
467
- let y = {
468
- name: 'noam',
469
- myDate: new Date(1976, 5, 16)
470
- };
471
- expect(repo.fields.myDate.displayValue(y)).toBe('noam1976');
472
- expect(repo.fields.myDate.toInput(new Date(1976, 5, 16))).toBe("1976-06-16");
473
- expect(repo.fields.myDate.fromInput("1976-06-16")).toEqual(new Date(1976, 5, 16));
474
- });
475
- it("date Storage works 1", () => {
476
- let col = decorateColumnSettings({
477
- valueType: Date,
478
- valueConverter: ValueConverters.DateOnly
479
- }, new Remult());
480
- expect(col.valueConverter.toDb(col.valueConverter.fromJson('1976-06-16')).toLocaleDateString()).toBe(new Date(1976, 5, 16, 0, 0, 0).toLocaleDateString());
481
- expect(col.valueConverter.toDb(col.valueConverter.fromJson('1976-06-16')).getDate()).toBe(16);
482
- });
483
- });
484
- describe("Test char date storage", () => {
485
- let x = ValueConverters.DateOnlyString;
486
- it("from db", () => {
487
- expect(x.toJson(x.fromDb('19760616'))).toBe('1976-06-16');
488
- });
489
- it("to db", () => {
490
- expect(x.toDb(x.fromJson('1976-06-16'))).toBe('19760616');
491
- });
492
- });
493
- describe("value list column without id and caption", () => {
494
- it("getValueList", () => {
495
- expect(getValueList(Language).length).toBe(3);
496
- });
497
- });
498
- describe("relation", () => {
499
- it("should get values", async () => {
500
- let [c] = await insertFourRows();
501
- let r = new OneToMany(c, {
502
- where: { description: "x" }
503
- });
504
- let rows = await r.load();
505
- expect(rows.length).toBe(2);
506
- let n = await r.create();
507
- expect(n.description).toBe("x");
508
- });
509
- it("should have an array and lazy load it", async () => {
510
- let [c] = await insertFourRows();
511
- let r = new OneToMany(c, {
512
- where: { description: 'x' }
513
- });
514
- let arr = r.lazyItems;
515
- expect(arr.length).toBe(0);
516
- await r.load();
517
- expect(arr.length).toBe(2);
518
- });
519
- });
520
- describe("context", () => {
521
- it("what", () => {
522
- var c = new Remult();
523
- expect(c.authenticated()).toBe(false);
524
- c.user = ({
525
- id: '1',
526
- name: 'name',
527
- roles: ["a"]
528
- });
529
- expect(c.authenticated()).toBe(true);
530
- c.user = (undefined);
531
- expect(c.authenticated()).toBe(false);
532
- });
533
- it("is allowed for instance works with array", () => {
534
- var remult = new Remult();
535
- remult.user = ({ roles: ["a"], id: '', name: '' });
536
- expect(remult.isAllowedForInstance({}, ["b", "a"])).toBe(true);
537
- });
538
- it("test no user is not allowed", () => {
539
- var remult = new Remult();
540
- remult.user = (undefined);
541
- expect(remult.user).toBeUndefined();
542
- });
543
- });
544
- it("test http provider for remult", async () => {
545
- var remult = new Remult({
546
- get: async (url) => {
547
- return { count: 7 };
548
- },
549
- delete: async () => { },
550
- put: async () => { },
551
- post: async () => { }
552
- });
553
- // expect(await toPromise(Promise.resolve(7))).toBe(7);
554
- expect(await remult.repo(TestCategories1).count()).toBe(7);
555
- });
556
- describe("allow", () => {
557
- it("should work", () => {
558
- expect(Allow.everyone()).toBe(true);
559
- var remult = new Remult();
560
- expect(Allow.authenticated(remult)).toBe(false);
561
- remult.user = ({ id: '', name: '', roles: [] });
562
- expect(Allow.authenticated(remult)).toBe(true);
563
- });
564
- });
565
- @EntityDecorator('123')
566
- class TestCategories1 extends newCategories {
567
- @Fields.string({
568
- validate: Validators.required
569
- })
570
- a;
571
- }
572
- describe("test ", () => {
573
- it("Test Validation,", async () => {
574
- var remult = new Remult();
575
- remult.dataProvider = (new InMemoryDataProvider());
576
- var c = remult.repo(TestCategories1);
577
- var cat = c.create();
578
- cat.a = '';
579
- var saved = false;
580
- try {
581
- await c.save(cat);
582
- saved = true;
583
- }
584
- catch (err) {
585
- expect(getEntityRef(cat).fields.a.error).toEqual("Should not be empty");
586
- }
587
- expect(saved).toBe(false);
588
- });
589
- });
590
- export class myDp extends ArrayEntityDataProvider {
591
- constructor(entity) {
592
- super(entity, []);
593
- }
594
- update(id, data) {
595
- throw new Error("what");
596
- }
597
- }
598
- class mockColumnDefs {
599
- dbName;
600
- constructor(dbName) {
601
- this.dbName = dbName;
602
- }
603
- apiUpdateAllowed(item) {
604
- throw new Error('Method not implemented.');
605
- }
606
- displayValue(item) {
607
- throw new Error('Method not implemented.');
608
- }
609
- includedInApi;
610
- toInput(value, inputType) {
611
- throw new Error('Method not implemented.');
612
- }
613
- fromInput(inputValue, inputType) {
614
- throw new Error('Method not implemented.');
615
- }
616
- async getDbName() {
617
- return this.dbName;
618
- }
619
- options;
620
- valueConverter = ValueConverters.Default;
621
- target;
622
- readonly;
623
- dbReadOnly;
624
- isServerExpression;
625
- key;
626
- caption;
627
- inputType;
628
- valueType;
629
- allowNull;
630
- dbType;
631
- }
@@ -1,10 +0,0 @@
1
- import { DataApiResponse } from "../data-api";
2
- export declare class TestDataApiResponse implements DataApiResponse {
3
- progress(progress: number): void;
4
- success(data: any): void;
5
- forbidden(): void;
6
- created(data: any): void;
7
- deleted(): void;
8
- notFound(): void;
9
- error(data: any): void;
10
- }
@@ -1,22 +0,0 @@
1
- export class TestDataApiResponse {
2
- progress(progress) {
3
- }
4
- success(data) {
5
- throw new Error(('didnt expect success: ' + JSON.stringify(data)));
6
- }
7
- forbidden() {
8
- throw new Error('didnt expect forbidden:');
9
- }
10
- created(data) {
11
- throw new Error('didnt expect created: ' + JSON.stringify(data));
12
- }
13
- deleted() {
14
- throw new Error('didnt expect deleted:');
15
- }
16
- notFound() {
17
- throw new Error('not found');
18
- }
19
- error(data) {
20
- throw new Error('error: ' + data + " " + JSON.stringify(data));
21
- }
22
- }
@@ -1,8 +0,0 @@
1
- import { EntityBase } from '../remult3';
2
- export declare class entityWithValidationsOnEntityEvent extends EntityBase {
3
- myId: number;
4
- name: string;
5
- }
6
- export declare class EntityWithLateBoundDbName extends EntityBase {
7
- id: number;
8
- }