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,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
- }