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.
- package/esm/graphql.js +27 -27
- package/esm/postgres/schema-builder.js +4 -4
- package/esm/remult-knex/index.js +2 -2
- package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +10 -0
- package/esm/src/id-entity.d.ts +4 -0
- package/esm/src/id-entity.js +8 -0
- package/esm/src/remult3/RepositoryImplementation.js +7 -5
- package/esm/src/shared-tests/db-tests.db-tests.js +35 -0
- package/package.json +1 -1
- package/postgres/postgresColumnSyntax.d.ts +2 -0
- package/postgres/postgresColumnSyntax.js +34 -0
- package/remult-knex/index.js +2 -2
- package/remult-middleware.d.ts +2 -0
- package/remult-middleware.js +70 -0
- package/server/register-actions-on-server.d.ts +3 -0
- package/server/register-actions-on-server.js +50 -0
- package/server/register-entities-on-server.d.ts +3 -0
- package/server/register-entities-on-server.js +19 -0
- package/src/backend-tests/backend-database-test-setup.backend-spec.js +10 -0
- package/{esm/core/src → src}/backend-tests/my-test.backend-spec.d.ts +1 -1
- package/src/backend-tests/my-test.backend-spec.js +217 -0
- package/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
- package/src/backend-tests/test-http-server.backend-spec.js +342 -0
- package/src/id-entity.d.ts +4 -0
- package/src/id-entity.js +17 -0
- package/src/remult3/RepositoryImplementation.js +15 -13
- package/src/shared-tests/db-tests.db-tests.js +64 -0
- package/{esm/core/src/valueConverters.d.ts → valueConverters.d.ts} +12 -13
- package/valueConverters.js +168 -0
- package/esm/angular/interfaces/index.d.ts +0 -1
- package/esm/angular/interfaces/index.js +0 -1
- package/esm/angular/interfaces/src/column-collection.d.ts +0 -70
- package/esm/angular/interfaces/src/column-collection.js +0 -341
- package/esm/angular/interfaces/src/data-area-settings.d.ts +0 -15
- package/esm/angular/interfaces/src/data-area-settings.js +0 -35
- package/esm/angular/interfaces/src/data-control-interfaces.d.ts +0 -36
- package/esm/angular/interfaces/src/data-control-interfaces.js +0 -57
- package/esm/angular/interfaces/src/dataList.d.ts +0 -13
- package/esm/angular/interfaces/src/dataList.js +0 -42
- package/esm/angular/interfaces/src/filter-helper.d.ts +0 -13
- package/esm/angular/interfaces/src/filter-helper.js +0 -59
- package/esm/angular/interfaces/src/grid-settings.d.ts +0 -145
- package/esm/angular/interfaces/src/grid-settings.js +0 -387
- package/esm/angular/interfaces/src/public_api.d.ts +0 -4
- package/esm/angular/interfaces/src/public_api.js +0 -4
- package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +0 -4
- package/esm/angular/src/angular/RemultAngularPluginsService.js +0 -3
- package/esm/angular/src/angular/data-control/data-control2.component.d.ts +0 -49
- package/esm/angular/src/angular/data-control/data-control2.component.js +0 -138
- package/esm/core/SseSubscriptionServer.d.ts +0 -33
- package/esm/core/SseSubscriptionServer.js +0 -107
- package/esm/core/assign.d.ts +0 -1
- package/esm/core/assign.js +0 -5
- package/esm/core/classType.d.ts +0 -3
- package/esm/core/classType.js +0 -1
- package/esm/core/index.d.ts +0 -27
- package/esm/core/index.js +0 -25
- package/esm/core/inputTypes.d.ts +0 -9
- package/esm/core/inputTypes.js +0 -9
- package/esm/core/live-query/data-provider-live-query-storage.d.ts +0 -22
- package/esm/core/live-query/data-provider-live-query-storage.js +0 -71
- package/esm/core/postgres/index.d.ts +0 -2
- package/esm/core/postgres/index.js +0 -2
- package/esm/core/postgres/postgres-data-provider.d.ts +0 -36
- package/esm/core/postgres/postgres-data-provider.js +0 -120
- package/esm/core/postgres/schema-builder.d.ts +0 -17
- package/esm/core/postgres/schema-builder.js +0 -153
- package/esm/core/remult-fresh.d.ts +0 -17
- package/esm/core/remult-fresh.js +0 -29
- package/esm/core/remult-knex/index.d.ts +0 -30
- package/esm/core/remult-knex/index.js +0 -446
- package/esm/core/remult-mongo.d.ts +0 -24
- package/esm/core/remult-mongo.js +0 -254
- package/esm/core/server/JsonEntityFileStorage.d.ts +0 -10
- package/esm/core/server/JsonEntityFileStorage.js +0 -25
- package/esm/core/server/core.d.ts +0 -4
- package/esm/core/server/core.js +0 -4
- package/esm/core/server/expressBridge.d.ts +0 -182
- package/esm/core/server/expressBridge.js +0 -938
- package/esm/core/server/index.d.ts +0 -6
- package/esm/core/server/index.js +0 -9
- package/esm/core/server/initAsyncHooks.d.ts +0 -1
- package/esm/core/server/initAsyncHooks.js +0 -9
- package/esm/core/server/initDataProvider.d.ts +0 -2
- package/esm/core/server/initDataProvider.js +0 -14
- package/esm/core/src/__EntityValueProvider.d.ts +0 -11
- package/esm/core/src/__EntityValueProvider.js +0 -1
- package/esm/core/src/__RowsOfDataForTesting.d.ts +0 -3
- package/esm/core/src/__RowsOfDataForTesting.js +0 -1
- package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
- package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -147
- package/esm/core/src/backend-tests/my-test.backend-spec.js +0 -197
- package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
- package/esm/core/src/backend-tests/test-http-server.backend-spec.js +0 -167
- package/esm/core/src/buildRestDataProvider.d.ts +0 -31
- package/esm/core/src/buildRestDataProvider.js +0 -113
- package/esm/core/src/column-interfaces.d.ts +0 -154
- package/esm/core/src/column-interfaces.js +0 -7
- package/esm/core/src/column.d.ts +0 -58
- package/esm/core/src/column.js +0 -174
- package/esm/core/src/context.d.ts +0 -134
- package/esm/core/src/context.js +0 -286
- package/esm/core/src/data-api.d.ts +0 -39
- package/esm/core/src/data-api.js +0 -279
- package/esm/core/src/data-interfaces.d.ts +0 -41
- package/esm/core/src/data-interfaces.js +0 -12
- package/esm/core/src/data-providers/array-entity-data-provider.d.ts +0 -22
- package/esm/core/src/data-providers/array-entity-data-provider.js +0 -252
- package/esm/core/src/data-providers/in-memory-database.d.ts +0 -9
- package/esm/core/src/data-providers/in-memory-database.js +0 -14
- package/esm/core/src/data-providers/json-data-provider.d.ts +0 -12
- package/esm/core/src/data-providers/json-data-provider.js +0 -55
- package/esm/core/src/data-providers/rest-data-provider.d.ts +0 -49
- package/esm/core/src/data-providers/rest-data-provider.js +0 -256
- package/esm/core/src/data-providers/sql-database.d.ts +0 -33
- package/esm/core/src/data-providers/sql-database.js +0 -384
- package/esm/core/src/data-providers/web-sql-data-provider.d.ts +0 -24
- package/esm/core/src/data-providers/web-sql-data-provider.js +0 -143
- package/esm/core/src/entity.d.ts +0 -91
- package/esm/core/src/entity.js +0 -1
- package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -50
- package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +0 -150
- package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -1
- package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +0 -1
- package/esm/core/src/filter/filter-interfaces.d.ts +0 -85
- package/esm/core/src/filter/filter-interfaces.js +0 -477
- package/esm/core/src/live-query/LiveQueryClient.d.ts +0 -20
- package/esm/core/src/live-query/LiveQueryClient.js +0 -188
- package/esm/core/src/live-query/SseSubscriptionClient.d.ts +0 -5
- package/esm/core/src/live-query/SseSubscriptionClient.js +0 -86
- package/esm/core/src/live-query/SubscriptionChannel.d.ts +0 -72
- package/esm/core/src/live-query/SubscriptionChannel.js +0 -123
- package/esm/core/src/live-query/SubscriptionServer.d.ts +0 -53
- package/esm/core/src/live-query/SubscriptionServer.js +0 -111
- package/esm/core/src/live-query/live-query-tests.spec.d.ts +0 -6
- package/esm/core/src/live-query/live-query-tests.spec.js +0 -952
- package/esm/core/src/remult-proxy.d.ts +0 -35
- package/esm/core/src/remult-proxy.js +0 -113
- package/esm/core/src/remult3/DecoratorReplacer.d.ts +0 -10
- package/esm/core/src/remult3/DecoratorReplacer.js +0 -20
- package/esm/core/src/remult3/RepositoryImplementation.d.ts +0 -355
- package/esm/core/src/remult3/RepositoryImplementation.js +0 -2109
- package/esm/core/src/remult3/index.d.ts +0 -2
- package/esm/core/src/remult3/index.js +0 -2
- package/esm/core/src/remult3/remult3.d.ts +0 -395
- package/esm/core/src/remult3/remult3.js +0 -2
- package/esm/core/src/server-action.d.ts +0 -81
- package/esm/core/src/server-action.js +0 -394
- package/esm/core/src/shared-tests/db-tests-setup.d.ts +0 -32
- package/esm/core/src/shared-tests/db-tests-setup.js +0 -78
- package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +0 -25
- package/esm/core/src/shared-tests/db-tests.db-tests.js +0 -810
- package/esm/core/src/shared-tests/deleteAll.d.ts +0 -2
- package/esm/core/src/shared-tests/deleteAll.js +0 -4
- package/esm/core/src/shared-tests/entityWithValidations.d.ts +0 -14
- package/esm/core/src/shared-tests/entityWithValidations.js +0 -43
- package/esm/core/src/shared-tests/index.d.ts +0 -4
- package/esm/core/src/shared-tests/index.js +0 -4
- package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +0 -1
- package/esm/core/src/shared-tests/test-custom-id-column.spec.js +0 -67
- package/esm/core/src/shared-tests/test-special-value.spec.d.ts +0 -10
- package/esm/core/src/shared-tests/test-special-value.spec.js +0 -73
- package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +0 -1
- package/esm/core/src/shared-tests/test-update-with-null.spec.js +0 -31
- package/esm/core/src/sort.d.ts +0 -16
- package/esm/core/src/sort.js +0 -103
- package/esm/core/src/sql-command.d.ts +0 -19
- package/esm/core/src/sql-command.js +0 -1
- package/esm/core/src/test.d.ts +0 -3
- package/esm/core/src/test.js +0 -12
- package/esm/core/src/tests/Done.d.ts +0 -5
- package/esm/core/src/tests/Done.js +0 -9
- package/esm/core/src/tests/RowProvider.spec.d.ts +0 -16
- package/esm/core/src/tests/RowProvider.spec.js +0 -631
- package/esm/core/src/tests/TestDataApiResponse.d.ts +0 -10
- package/esm/core/src/tests/TestDataApiResponse.js +0 -22
- package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +0 -8
- package/esm/core/src/tests/basicRowFunctionality.spec.js +0 -2103
- package/esm/core/src/tests/c.d.ts +0 -8
- package/esm/core/src/tests/c.js +0 -13
- package/esm/core/src/tests/createData.d.ts +0 -7
- package/esm/core/src/tests/createData.js +0 -22
- package/esm/core/src/tests/d.d.ts +0 -6
- package/esm/core/src/tests/d.js +0 -11
- package/esm/core/src/tests/dWithPrefilter.d.ts +0 -7
- package/esm/core/src/tests/dWithPrefilter.js +0 -18
- package/esm/core/src/tests/entityForCustomFilter.d.ts +0 -16
- package/esm/core/src/tests/entityForCustomFilter.js +0 -33
- package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +0 -5
- package/esm/core/src/tests/entityWithValidationsOnColumn.js +0 -13
- package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +0 -4
- package/esm/core/src/tests/frontend-database-tests-setup.spec.js +0 -37
- package/esm/core/src/tests/h.d.ts +0 -6
- package/esm/core/src/tests/h.js +0 -24
- package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +0 -1
- package/esm/core/src/tests/remult-3-basic-tests.spec.js +0 -236
- package/esm/core/src/tests/remult-3-entities.d.ts +0 -23
- package/esm/core/src/tests/remult-3-entities.js +0 -39
- package/esm/core/src/tests/tasks.d.ts +0 -6
- package/esm/core/src/tests/tasks.js +0 -10
- package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
- package/esm/core/src/tests/test-context-as-storage.spec.js +0 -1
- package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +0 -1
- package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +0 -389
- package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +0 -5
- package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +0 -152
- package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +0 -1
- package/esm/core/src/tests/test-decorator-precedence.spec.js +0 -38
- package/esm/core/src/tests/test-default-value.spec.d.ts +0 -1
- package/esm/core/src/tests/test-default-value.spec.js +0 -33
- package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +0 -14
- package/esm/core/src/tests/test-entity-inheritance.spec.js +0 -82
- package/esm/core/src/tests/test-exceptions.spec.d.ts +0 -1
- package/esm/core/src/tests/test-exceptions.spec.js +0 -375
- package/esm/core/src/tests/test-json.spec.d.ts +0 -1
- package/esm/core/src/tests/test-json.spec.js +0 -115
- package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +0 -9
- package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +0 -809
- package/esm/core/src/tests/test-non-active-record.spec.d.ts +0 -1
- package/esm/core/src/tests/test-non-active-record.spec.js +0 -66
- package/esm/core/src/tests/test-object-column.spec.d.ts +0 -1
- package/esm/core/src/tests/test-object-column.spec.js +0 -189
- package/esm/core/src/tests/test-paged-foreach.spec.d.ts +0 -1
- package/esm/core/src/tests/test-paged-foreach.spec.js +0 -328
- package/esm/core/src/tests/test-remult-angular.spec.d.ts +0 -1
- package/esm/core/src/tests/test-remult-angular.spec.js +0 -23
- package/esm/core/src/tests/test-server-controller.spec.d.ts +0 -7
- package/esm/core/src/tests/test-server-controller.spec.js +0 -489
- package/esm/core/src/tests/test-server-expressions.spec.d.ts +0 -1
- package/esm/core/src/tests/test-server-expressions.spec.js +0 -178
- package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +0 -1
- package/esm/core/src/tests/test-server-method-on-entity.spec.js +0 -306
- package/esm/core/src/tests/test-sql-expression.spec.d.ts +0 -5
- package/esm/core/src/tests/test-sql-expression.spec.js +0 -205
- package/esm/core/src/tests/test-sql.spec.d.ts +0 -1
- package/esm/core/src/tests/test-sql.spec.js +0 -170
- package/esm/core/src/tests/test-subscribe.spec.d.ts +0 -1
- package/esm/core/src/tests/test-subscribe.spec.js +0 -135
- package/esm/core/src/tests/test-type-recovery.spec.d.ts +0 -1
- package/esm/core/src/tests/test-type-recovery.spec.js +0 -49
- package/esm/core/src/tests/test-where-api.spec.d.ts +0 -1
- package/esm/core/src/tests/test-where-api.spec.js +0 -434
- package/esm/core/src/tests/testHelper.spec.d.ts +0 -36
- package/esm/core/src/tests/testHelper.spec.js +0 -226
- package/esm/core/src/tests/testModel/models.d.ts +0 -16
- package/esm/core/src/tests/testModel/models.js +0 -25
- package/esm/core/src/validators.d.ts +0 -14
- package/esm/core/src/validators.js +0 -33
- package/esm/core/src/valueConverters.js +0 -197
- package/esm/core/urlBuilder.d.ts +0 -6
- package/esm/core/urlBuilder.js +0 -20
- package/esm/test-servers/shared/Task.d.ts +0 -9
- package/esm/test-servers/shared/Task.js +0 -32
- package/esm/test.d.ts +0 -5
- package/esm/test.js +0 -6
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
import { ActionTestConfig, testRestDb } from './testHelper.spec';
|
|
2
|
-
import { TestDataApiResponse } from "./TestDataApiResponse";
|
|
3
|
-
import { Remult, isBackend } from '../context';
|
|
4
|
-
import { actionInfo, BackendMethod } from '../server-action';
|
|
5
|
-
import { Field, Entity, EntityBase, getEntityRef, Fields } from '../remult3';
|
|
6
|
-
import { InMemoryDataProvider } from '../data-providers/in-memory-database';
|
|
7
|
-
import { DataApi } from '../data-api';
|
|
8
|
-
import { assign } from '../../assign';
|
|
9
|
-
import { dWithPrefilter } from './dWithPrefilter';
|
|
10
|
-
import { describeClass } from '../remult3/DecoratorReplacer';
|
|
11
|
-
@Entity('testServerMethodOnEntity')
|
|
12
|
-
class testServerMethodOnEntity extends EntityBase {
|
|
13
|
-
remult;
|
|
14
|
-
constructor(remult) {
|
|
15
|
-
super();
|
|
16
|
-
this.remult = remult;
|
|
17
|
-
}
|
|
18
|
-
@Fields.string({
|
|
19
|
-
validate: (y, x) => {
|
|
20
|
-
if (y.a == "errorc") {
|
|
21
|
-
x.error = "error on client";
|
|
22
|
-
}
|
|
23
|
-
else if (y.a == "error on server" && isBackend()) {
|
|
24
|
-
x.error = "error on server";
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
})
|
|
28
|
-
a;
|
|
29
|
-
@BackendMethod({ allowed: true })
|
|
30
|
-
async doIt1() {
|
|
31
|
-
let result = 'hello ' + this.a;
|
|
32
|
-
this.a = 'yael';
|
|
33
|
-
return {
|
|
34
|
-
onServer: isBackend(),
|
|
35
|
-
result
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
async doIt1NoDecorator() {
|
|
39
|
-
let result = 'hello ' + this.a;
|
|
40
|
-
this.a = 'yael';
|
|
41
|
-
return {
|
|
42
|
-
onServer: isBackend(),
|
|
43
|
-
result
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
@BackendMethod({ allowed: true })
|
|
47
|
-
async doItAgain() {
|
|
48
|
-
expect(await this.remult.repo(testServerMethodOnEntity).count()).toBe(0);
|
|
49
|
-
await this._.save();
|
|
50
|
-
expect(await this.remult.repo(testServerMethodOnEntity).count()).toBe(1);
|
|
51
|
-
return (await this.remult.repo(testServerMethodOnEntity).findFirst()).a;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
describeClass(testServerMethodOnEntity, undefined, {
|
|
55
|
-
doIt1NoDecorator: BackendMethod({ allowed: true, paramTypes: [Remult] })
|
|
56
|
-
});
|
|
57
|
-
@Entity('testBoolCreate123', (o, c) => assign(o, {
|
|
58
|
-
allowApiCrud: true,
|
|
59
|
-
saving: async (t) => {
|
|
60
|
-
if (isBackend() && t._.isNew()) {
|
|
61
|
-
await c.repo(testBoolCreate123).count();
|
|
62
|
-
await new Promise((res, rej) => setTimeout(() => {
|
|
63
|
-
res({});
|
|
64
|
-
}, 20));
|
|
65
|
-
t.ok123 = true;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}))
|
|
69
|
-
class testBoolCreate123 extends EntityBase {
|
|
70
|
-
@Fields.number()
|
|
71
|
-
id;
|
|
72
|
-
@Fields.boolean({})
|
|
73
|
-
ok123 = false;
|
|
74
|
-
@BackendMethod({ allowed: true })
|
|
75
|
-
async testIt() {
|
|
76
|
-
await this._.save();
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
describe("test Server method in entity", () => {
|
|
80
|
-
let c = new Remult();
|
|
81
|
-
it("test server method on Entity", async () => {
|
|
82
|
-
let x = c.repo(testServerMethodOnEntity).create();
|
|
83
|
-
x.a = 'Noam';
|
|
84
|
-
let r = await x.doIt1();
|
|
85
|
-
expect(r.onServer).toBe(true);
|
|
86
|
-
expect(r.result).toBe('hello Noam');
|
|
87
|
-
expect(x.a).toBe("yael");
|
|
88
|
-
});
|
|
89
|
-
it("test server method on Entity without decorator", async () => {
|
|
90
|
-
let x = c.repo(testServerMethodOnEntity).create();
|
|
91
|
-
x.a = 'Noam';
|
|
92
|
-
let r = await x.doIt1NoDecorator();
|
|
93
|
-
expect(r.onServer).toBe(true);
|
|
94
|
-
expect(r.result).toBe('hello Noam');
|
|
95
|
-
expect(x.a).toBe("yael");
|
|
96
|
-
});
|
|
97
|
-
it("test server method on Entity", async () => {
|
|
98
|
-
let x = c.repo(testServerMethodOnEntity).create();
|
|
99
|
-
x.a = 'Noam';
|
|
100
|
-
expect(await x.doItAgain()).toBe("Noam");
|
|
101
|
-
});
|
|
102
|
-
it("test validation method", async () => {
|
|
103
|
-
let x = c.repo(testServerMethodOnEntity).create();
|
|
104
|
-
x.a = 'errorc';
|
|
105
|
-
let happened = false;
|
|
106
|
-
try {
|
|
107
|
-
let r = await x.doIt1();
|
|
108
|
-
happened = true;
|
|
109
|
-
}
|
|
110
|
-
catch (err) {
|
|
111
|
-
expect(err.modelState.a).toBe("error on client");
|
|
112
|
-
expect(getEntityRef(x).fields.a.error).toBe("error on client");
|
|
113
|
-
}
|
|
114
|
-
expect(happened).toBe(false);
|
|
115
|
-
});
|
|
116
|
-
it("test backend method with adhoc entity", async () => {
|
|
117
|
-
const myClass = class {
|
|
118
|
-
id = 0;
|
|
119
|
-
name = '';
|
|
120
|
-
async doSomething() {
|
|
121
|
-
return this.name + isBackend();
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
describeClass(myClass, Entity('adHocEntity'), {
|
|
125
|
-
id: Fields.autoIncrement(),
|
|
126
|
-
name: Fields.string(),
|
|
127
|
-
doSomething: BackendMethod({ allowed: true }),
|
|
128
|
-
});
|
|
129
|
-
const x = new Remult().repo(myClass).create();
|
|
130
|
-
x.name = "123";
|
|
131
|
-
expect(await x.doSomething()).toBe("123true");
|
|
132
|
-
});
|
|
133
|
-
it("test static backend method with adhoc entity", async () => {
|
|
134
|
-
const myClass = class {
|
|
135
|
-
id = 0;
|
|
136
|
-
name = '';
|
|
137
|
-
static async adHockDoSomething() {
|
|
138
|
-
return isBackend();
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
describeClass(myClass, Entity('adHocEntity'), {
|
|
142
|
-
id: Fields.autoIncrement(),
|
|
143
|
-
name: Fields.string()
|
|
144
|
-
}, {
|
|
145
|
-
adHockDoSomething: BackendMethod({ allowed: true }),
|
|
146
|
-
});
|
|
147
|
-
expect(await myClass.adHockDoSomething()).toBe(true);
|
|
148
|
-
});
|
|
149
|
-
it("test validation on server", async () => {
|
|
150
|
-
let x = c.repo(testServerMethodOnEntity).create();
|
|
151
|
-
x.a = "error on server";
|
|
152
|
-
let happened = false;
|
|
153
|
-
try {
|
|
154
|
-
let r = await x.doIt1();
|
|
155
|
-
happened = true;
|
|
156
|
-
}
|
|
157
|
-
catch (err) {
|
|
158
|
-
expect(err.modelState.a).toBe("error on server");
|
|
159
|
-
expect(getEntityRef(x).fields.a.error).toBe("error on server");
|
|
160
|
-
}
|
|
161
|
-
expect(happened).toBe(false);
|
|
162
|
-
});
|
|
163
|
-
it("saves correctly to db", async () => {
|
|
164
|
-
actionInfo.runningOnServer = true;
|
|
165
|
-
let remult = new Remult();
|
|
166
|
-
remult.dataProvider = (new InMemoryDataProvider());
|
|
167
|
-
let r = remult.repo(testBoolCreate123);
|
|
168
|
-
let dataApi = new DataApi(r, remult);
|
|
169
|
-
let t = new TestDataApiResponse();
|
|
170
|
-
t.created = x => {
|
|
171
|
-
expect(x.ok123).toBe(true);
|
|
172
|
-
};
|
|
173
|
-
await dataApi.post(t, { id: 1, ok123: false });
|
|
174
|
-
t.success = x => {
|
|
175
|
-
expect(x.ok123).toBe(false);
|
|
176
|
-
};
|
|
177
|
-
await dataApi.put(t, 1, { ok123: false });
|
|
178
|
-
actionInfo.runningOnServer = false;
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
@Entity('a')
|
|
182
|
-
class a extends EntityBase {
|
|
183
|
-
@Fields.integer()
|
|
184
|
-
id;
|
|
185
|
-
}
|
|
186
|
-
@Entity('b')
|
|
187
|
-
class b extends EntityBase {
|
|
188
|
-
@Fields.integer()
|
|
189
|
-
id;
|
|
190
|
-
@Field(() => a)
|
|
191
|
-
a;
|
|
192
|
-
}
|
|
193
|
-
@Entity('c')
|
|
194
|
-
class c extends EntityBase {
|
|
195
|
-
remult;
|
|
196
|
-
@Fields.integer()
|
|
197
|
-
id;
|
|
198
|
-
@Field(() => b)
|
|
199
|
-
b;
|
|
200
|
-
@BackendMethod({ allowed: true })
|
|
201
|
-
async doIt() {
|
|
202
|
-
expect(this.b.id).toBe(11);
|
|
203
|
-
expect(this.b.a.id).toBe(1);
|
|
204
|
-
this.b = await this.remult.repo(b).findId(12);
|
|
205
|
-
expect(this.b.id).toBe(12);
|
|
206
|
-
expect(this.b.a.id).toBe(2);
|
|
207
|
-
await this.save();
|
|
208
|
-
return this.b.a.id;
|
|
209
|
-
}
|
|
210
|
-
@BackendMethod({ allowed: true })
|
|
211
|
-
async doIt2() {
|
|
212
|
-
expect(this.b.id).toBe(12);
|
|
213
|
-
expect(this.b.a.id).toBe(2);
|
|
214
|
-
await this.save();
|
|
215
|
-
return this.b.a.id;
|
|
216
|
-
}
|
|
217
|
-
constructor(remult) {
|
|
218
|
-
super();
|
|
219
|
-
this.remult = remult;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
describe("complex entity relations on server entity and backend method", () => {
|
|
223
|
-
beforeEach(() => {
|
|
224
|
-
ActionTestConfig.db.rows = [];
|
|
225
|
-
});
|
|
226
|
-
it("fix it", async () => {
|
|
227
|
-
let remult = new Remult();
|
|
228
|
-
remult.dataProvider = (ActionTestConfig.db);
|
|
229
|
-
let a1 = await remult.repo(a).create({ id: 1 }).save();
|
|
230
|
-
let a2 = await remult.repo(a).create({ id: 2 }).save();
|
|
231
|
-
let b1 = await remult.repo(b).create({ id: 11, a: a1 }).save();
|
|
232
|
-
let b2 = await remult.repo(b).create({ id: 12, a: a2 }).save();
|
|
233
|
-
let c1 = await remult.repo(c).create({ id: 21, b: b1 }).save();
|
|
234
|
-
remult = new Remult(); //clear the cache;
|
|
235
|
-
remult.dataProvider = (ActionTestConfig.db);
|
|
236
|
-
let r = await c1.doIt();
|
|
237
|
-
expect(r).toBe(2);
|
|
238
|
-
expect(c1.b.id).toBe(12);
|
|
239
|
-
expect(c1.b.a.id).toBe(2);
|
|
240
|
-
});
|
|
241
|
-
it("fix it new row", async () => {
|
|
242
|
-
let remult = new Remult();
|
|
243
|
-
remult.dataProvider = (ActionTestConfig.db);
|
|
244
|
-
let a1 = await remult.repo(a).create({ id: 1 }).save();
|
|
245
|
-
let a2 = await remult.repo(a).create({ id: 2 }).save();
|
|
246
|
-
let b1 = await remult.repo(b).create({ id: 11, a: a1 }).save();
|
|
247
|
-
let b2 = await remult.repo(b).create({ id: 12, a: a2 }).save();
|
|
248
|
-
remult = new Remult(); //clear the cache;
|
|
249
|
-
remult.dataProvider = (ActionTestConfig.db);
|
|
250
|
-
let c1 = await remult.repo(c).create({ id: 21, b: b1 });
|
|
251
|
-
let r = await c1.doIt();
|
|
252
|
-
expect(r).toBe(2);
|
|
253
|
-
expect(c1.b.id).toBe(12);
|
|
254
|
-
expect(c1.b.a.id).toBe(2);
|
|
255
|
-
});
|
|
256
|
-
it("fix it change value", async () => {
|
|
257
|
-
let remult = new Remult();
|
|
258
|
-
remult.dataProvider = (ActionTestConfig.db);
|
|
259
|
-
let a1 = await remult.repo(a).create({ id: 1 }).save();
|
|
260
|
-
let a2 = await remult.repo(a).create({ id: 2 }).save();
|
|
261
|
-
let b1 = await remult.repo(b).create({ id: 11, a: a1 }).save();
|
|
262
|
-
let b2 = await remult.repo(b).create({ id: 12, a: a2 }).save();
|
|
263
|
-
let c1 = await remult.repo(c).create({ id: 21, b: b1 }).save();
|
|
264
|
-
remult = new Remult(); //clear the cache;
|
|
265
|
-
remult.dataProvider = (ActionTestConfig.db);
|
|
266
|
-
c1 = await remult.repo(c).findId(21);
|
|
267
|
-
c1.b = b2;
|
|
268
|
-
let r = await c1.doIt2();
|
|
269
|
-
expect(r).toBe(2);
|
|
270
|
-
expect(c1.b.id).toBe(12);
|
|
271
|
-
expect(c1.b.a.id).toBe(2);
|
|
272
|
-
});
|
|
273
|
-
});
|
|
274
|
-
it("test that entity backend method respects api filter", async () => {
|
|
275
|
-
let remult = new Remult(ActionTestConfig.db);
|
|
276
|
-
let repo = remult.repo(dWithPrefilter);
|
|
277
|
-
await repo.query().forEach(x => x.delete());
|
|
278
|
-
let d1 = await repo.create({ id: 1, b: 1 }).save();
|
|
279
|
-
await repo.create({ id: 2, b: 1 }).save();
|
|
280
|
-
await repo.create({ id: 3, b: 2 }).save();
|
|
281
|
-
let d4 = await repo.create({ id: 4, b: 2 }).save();
|
|
282
|
-
dWithPrefilter.count = 0;
|
|
283
|
-
expect(await d4.doIt()).toBe(true);
|
|
284
|
-
;
|
|
285
|
-
expect(dWithPrefilter.count).toBe(1);
|
|
286
|
-
dWithPrefilter.count = 0;
|
|
287
|
-
let error = false;
|
|
288
|
-
try {
|
|
289
|
-
await d1.doIt();
|
|
290
|
-
}
|
|
291
|
-
catch {
|
|
292
|
-
error = true;
|
|
293
|
-
}
|
|
294
|
-
expect(error).toBe(true);
|
|
295
|
-
expect(dWithPrefilter.count).toBe(0);
|
|
296
|
-
});
|
|
297
|
-
it("test api filter cant be overwritten", async () => {
|
|
298
|
-
return testRestDb(async ({ remult }) => {
|
|
299
|
-
let repo = remult.repo(dWithPrefilter);
|
|
300
|
-
let d1 = await repo.create({ id: 1, b: 1 }).save();
|
|
301
|
-
await repo.create({ id: 3, b: 2 }).save();
|
|
302
|
-
let d4 = await repo.create({ id: 4, b: 2 }).save();
|
|
303
|
-
expect(await repo.count({ b: 1 })).toBe(0);
|
|
304
|
-
expect((await repo.find({ where: { b: 1 } })).length).toBe(0);
|
|
305
|
-
});
|
|
306
|
-
});
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
import { Remult } from '../context';
|
|
2
|
-
import { SqlDatabase } from '../data-providers/sql-database';
|
|
3
|
-
import { WebSqlDataProvider } from '../data-providers/web-sql-data-provider';
|
|
4
|
-
import { Field, Entity, EntityBase, ValueListFieldType, Fields, getValueList, ValueListInfo, IdEntity } from '../remult3';
|
|
5
|
-
import { postgresColumnSyntax } from '../../postgres/schema-builder';
|
|
6
|
-
import { FilterConsumerBridgeToSqlRequest, dbNamesOf, isDbReadonly } from '../filter/filter-consumer-bridge-to-sql-request';
|
|
7
|
-
describe("test sql database expressions", () => {
|
|
8
|
-
let web = new WebSqlDataProvider("test");
|
|
9
|
-
let db = new SqlDatabase(web);
|
|
10
|
-
let remult = new Remult();
|
|
11
|
-
remult.dataProvider = (db);
|
|
12
|
-
async function deleteAll() {
|
|
13
|
-
await web.dropTable(remult.repo(testSqlExpression).metadata);
|
|
14
|
-
await web.dropTable(remult.repo(expressionEntity).metadata);
|
|
15
|
-
}
|
|
16
|
-
it("test basics", async () => {
|
|
17
|
-
await deleteAll();
|
|
18
|
-
let x = remult.repo(testSqlExpression).create();
|
|
19
|
-
x.code = 3;
|
|
20
|
-
await x._.save();
|
|
21
|
-
expect(x.code).toBe(3);
|
|
22
|
-
expect(x.testExpression).toBe(15, "after save");
|
|
23
|
-
expect(x._.fields.testExpression.originalValue).toBe(15, "after save");
|
|
24
|
-
x = await remult.repo(testSqlExpression).findFirst();
|
|
25
|
-
expect(x.testExpression).toBe(15);
|
|
26
|
-
});
|
|
27
|
-
it("test undefined behaves as a column", async () => {
|
|
28
|
-
await deleteAll();
|
|
29
|
-
let x = remult.repo(expressionEntity);
|
|
30
|
-
let n = await dbNamesOf(x.metadata);
|
|
31
|
-
expect((n.col)).toBe('col');
|
|
32
|
-
expect((await x.create({ col: 'abc', id: 1 }).save()).col).toBe('abc');
|
|
33
|
-
expect(isDbReadonly(x.metadata.fields.col, n)).toBe(false);
|
|
34
|
-
let c = new Remult();
|
|
35
|
-
c.dataProvider = (db);
|
|
36
|
-
expressionEntity.yes = true;
|
|
37
|
-
x = c.repo(expressionEntity);
|
|
38
|
-
n = await dbNamesOf(x.metadata);
|
|
39
|
-
expect(n.col).toBe("'1+1'");
|
|
40
|
-
expect((await x.create({ col: 'abc', id: 2 }).save()).col).toBe('1+1');
|
|
41
|
-
expect(isDbReadonly(x.metadata.fields.col, n)).toBe(true);
|
|
42
|
-
});
|
|
43
|
-
it("test asyync dbname", async () => {
|
|
44
|
-
let z = await remult.repo(testServerExpression1).metadata.getDbName();
|
|
45
|
-
expect(z).toBe('testServerExpression1');
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
@Entity('expressionEntity')
|
|
49
|
-
class expressionEntity extends EntityBase {
|
|
50
|
-
@Fields.integer()
|
|
51
|
-
id;
|
|
52
|
-
static yes;
|
|
53
|
-
@Fields.string({
|
|
54
|
-
sqlExpression: async () => expressionEntity.yes ? "'1+1'" : undefined
|
|
55
|
-
})
|
|
56
|
-
col;
|
|
57
|
-
}
|
|
58
|
-
@Entity('testSqlExpression')
|
|
59
|
-
class testSqlExpression extends EntityBase {
|
|
60
|
-
@Fields.number()
|
|
61
|
-
code;
|
|
62
|
-
@Fields.number({
|
|
63
|
-
sqlExpression: async (x) => {
|
|
64
|
-
return await x.fields.code.getDbName() + ' * 5';
|
|
65
|
-
}
|
|
66
|
-
})
|
|
67
|
-
testExpression;
|
|
68
|
-
}
|
|
69
|
-
@Entity('testServerExpression1', {
|
|
70
|
-
sqlExpression: async () => new Promise(res => setTimeout(() => {
|
|
71
|
-
res('testServerExpression1');
|
|
72
|
-
}, 30))
|
|
73
|
-
})
|
|
74
|
-
class testServerExpression1 extends EntityBase {
|
|
75
|
-
@Fields.number()
|
|
76
|
-
code;
|
|
77
|
-
}
|
|
78
|
-
export class myDummySQLCommand {
|
|
79
|
-
execute(sql) {
|
|
80
|
-
throw new Error("Method not implemented.");
|
|
81
|
-
}
|
|
82
|
-
addParameterAndReturnSqlToken(val) {
|
|
83
|
-
if (val === null)
|
|
84
|
-
return "null";
|
|
85
|
-
if (val instanceof Date)
|
|
86
|
-
val = val.toISOString();
|
|
87
|
-
if (typeof (val) == "string") {
|
|
88
|
-
return '\'' + val.replace(/'/g, '\'\'') + '\'';
|
|
89
|
-
}
|
|
90
|
-
return val.toString();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
describe("test filter for date", () => {
|
|
94
|
-
it("filter", async () => {
|
|
95
|
-
let c = new Remult();
|
|
96
|
-
let e = c.repo(testCreate);
|
|
97
|
-
var d = new myDummySQLCommand();
|
|
98
|
-
var db = await dbNamesOf(e.metadata);
|
|
99
|
-
let f = new FilterConsumerBridgeToSqlRequest(d, db);
|
|
100
|
-
f.isGreaterOrEqualTo(e.metadata.fields.theDate, new Date("2021-08-06T05:05:25.440Z"));
|
|
101
|
-
expect(await f.resolveWhere()).toBe(" where theDate >= '" + new Date(2021, 7, 6).toISOString() + "'");
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
describe("Postgres create db", () => {
|
|
105
|
-
let c = new Remult();
|
|
106
|
-
it("what", () => {
|
|
107
|
-
let e = c.repo(testCreate);
|
|
108
|
-
expect(postgresColumnSyntax(e.metadata.fields.theDate, "x")).toBe("x date");
|
|
109
|
-
expect(postgresColumnSyntax(e.metadata.fields.i, "x")).toBe("x integer default 0 not null");
|
|
110
|
-
expect(postgresColumnSyntax(e.metadata.fields.s, "x")).toBe("x varchar default '' not null", "s");
|
|
111
|
-
expect(postgresColumnSyntax(e.metadata.fields.s2, "x")).toBe("x varchar default '' not null", "s2");
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
@ValueListFieldType()
|
|
115
|
-
class intId {
|
|
116
|
-
id;
|
|
117
|
-
caption;
|
|
118
|
-
static z = new intId(0, '');
|
|
119
|
-
constructor(id, caption) {
|
|
120
|
-
this.id = id;
|
|
121
|
-
this.caption = caption;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
@ValueListFieldType()
|
|
125
|
-
class stringId {
|
|
126
|
-
id;
|
|
127
|
-
caption;
|
|
128
|
-
static z = new stringId('0', '');
|
|
129
|
-
constructor(id, caption) {
|
|
130
|
-
this.id = id;
|
|
131
|
-
this.caption = caption;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
@ValueListFieldType()
|
|
135
|
-
class stringId2 {
|
|
136
|
-
id;
|
|
137
|
-
caption;
|
|
138
|
-
static z = new stringId2();
|
|
139
|
-
constructor(id, caption) {
|
|
140
|
-
this.id = id;
|
|
141
|
-
this.caption = caption;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
@Entity('testCreate')
|
|
145
|
-
class testCreate extends IdEntity {
|
|
146
|
-
@Fields.dateOnly()
|
|
147
|
-
theDate;
|
|
148
|
-
@Field(() => intId)
|
|
149
|
-
i;
|
|
150
|
-
@Field(() => stringId)
|
|
151
|
-
s;
|
|
152
|
-
@Field(() => stringId2)
|
|
153
|
-
s2;
|
|
154
|
-
}
|
|
155
|
-
@ValueListFieldType({
|
|
156
|
-
getValues: () => [
|
|
157
|
-
new missingCaption('abc')
|
|
158
|
-
]
|
|
159
|
-
})
|
|
160
|
-
class missingCaption {
|
|
161
|
-
id;
|
|
162
|
-
constructor(id) {
|
|
163
|
-
this.id = id;
|
|
164
|
-
}
|
|
165
|
-
caption;
|
|
166
|
-
}
|
|
167
|
-
@ValueListFieldType()
|
|
168
|
-
class missingCaption2 {
|
|
169
|
-
id;
|
|
170
|
-
caption;
|
|
171
|
-
static item = new missingCaption2("abc");
|
|
172
|
-
constructor(id, caption) {
|
|
173
|
-
this.id = id;
|
|
174
|
-
this.caption = caption;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
describe("Test Value List Items", () => {
|
|
178
|
-
it("require id", () => {
|
|
179
|
-
try {
|
|
180
|
-
const missingId = class {
|
|
181
|
-
};
|
|
182
|
-
ValueListFieldType({
|
|
183
|
-
getValues: () => [
|
|
184
|
-
new missingId()
|
|
185
|
-
]
|
|
186
|
-
})(missingId);
|
|
187
|
-
getValueList(missingId);
|
|
188
|
-
expect(true).toBe(false, "should have failed and not reached this since it's missing an id");
|
|
189
|
-
}
|
|
190
|
-
catch {
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
it("getValuesWorks Early", () => {
|
|
194
|
-
expect(getValueList(missingCaption).length).toBe(1);
|
|
195
|
-
});
|
|
196
|
-
it("caption is auto generated", () => {
|
|
197
|
-
expect(getValueList(missingCaption)[0].caption).toBe("Abc");
|
|
198
|
-
});
|
|
199
|
-
it("test caption 2", () => {
|
|
200
|
-
expect(getValueList(missingCaption2)[0].caption).toBe("Abc");
|
|
201
|
-
});
|
|
202
|
-
it("find by id", () => {
|
|
203
|
-
expect(ValueListInfo.get(missingCaption).byId("abc").caption).toBe("Abc");
|
|
204
|
-
});
|
|
205
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { WebSqlDataProvider } from '../data-providers/web-sql-data-provider';
|
|
2
|
-
import { Remult } from '../context';
|
|
3
|
-
import { SqlDatabase } from '../data-providers/sql-database';
|
|
4
|
-
import { Categories } from './remult-3-entities';
|
|
5
|
-
import { Entity, Fields } from '../remult3';
|
|
6
|
-
import { testWebSqlImpl } from './frontend-database-tests-setup.spec';
|
|
7
|
-
import { entityWithValidations } from '../shared-tests/entityWithValidations';
|
|
8
|
-
import { dbNamesOf } from '../filter/filter-consumer-bridge-to-sql-request';
|
|
9
|
-
describe("test sql database", () => {
|
|
10
|
-
let db = new SqlDatabase(new WebSqlDataProvider("test"));
|
|
11
|
-
let remult = new Remult();
|
|
12
|
-
remult.dataProvider = (db);
|
|
13
|
-
async function deleteAll() {
|
|
14
|
-
for (const c of await remult.repo(Categories).find()) {
|
|
15
|
-
await c._.delete();
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
it("test basics", async () => {
|
|
19
|
-
await deleteAll();
|
|
20
|
-
expect(await remult.repo(Categories).count()).toBe(0);
|
|
21
|
-
let c = remult.repo(Categories).create();
|
|
22
|
-
c.id = 1;
|
|
23
|
-
c.categoryName = "noam";
|
|
24
|
-
await c._.save();
|
|
25
|
-
expect(await remult.repo(Categories).count()).toBe(1);
|
|
26
|
-
let cats = await remult.repo(Categories).find();
|
|
27
|
-
expect(cats.length).toBe(1);
|
|
28
|
-
expect(cats[0].id).toBe(1);
|
|
29
|
-
expect(cats[0].categoryName).toBe("noam");
|
|
30
|
-
});
|
|
31
|
-
it("test transactions", async () => {
|
|
32
|
-
await deleteAll();
|
|
33
|
-
let sql = new WebSqlDataProvider("test");
|
|
34
|
-
const prev = SqlDatabase.LogToConsole;
|
|
35
|
-
SqlDatabase.LogToConsole = true;
|
|
36
|
-
try {
|
|
37
|
-
let db = new SqlDatabase({
|
|
38
|
-
createCommand: () => sql.createCommand(),
|
|
39
|
-
entityIsUsedForTheFirstTime: (e) => sql.entityIsUsedForTheFirstTime(e),
|
|
40
|
-
getLimitSqlSyntax: (a, b) => sql.getLimitSqlSyntax(a, b),
|
|
41
|
-
transaction: what => what(sql)
|
|
42
|
-
});
|
|
43
|
-
await db.transaction(async (dp) => {
|
|
44
|
-
const repo = new Remult(dp).repo(Categories);
|
|
45
|
-
expect(await repo.count({ categoryName: 'a' })).toBe(0);
|
|
46
|
-
let ok = false;
|
|
47
|
-
try {
|
|
48
|
-
await dp.transaction(async () => { });
|
|
49
|
-
ok = true;
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
}
|
|
53
|
-
expect(ok).toBe(false);
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
finally {
|
|
57
|
-
SqlDatabase.LogToConsole = false;
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
it("query after transaction should fail", async () => {
|
|
61
|
-
await deleteAll();
|
|
62
|
-
let sql = new WebSqlDataProvider("test");
|
|
63
|
-
let db = new SqlDatabase({
|
|
64
|
-
createCommand: () => sql.createCommand(),
|
|
65
|
-
entityIsUsedForTheFirstTime: (e) => sql.entityIsUsedForTheFirstTime(e),
|
|
66
|
-
getLimitSqlSyntax: (a, b) => sql.getLimitSqlSyntax(a, b),
|
|
67
|
-
transaction: what => what(sql)
|
|
68
|
-
});
|
|
69
|
-
let repo;
|
|
70
|
-
await db.transaction(async (dp) => {
|
|
71
|
-
repo = new Remult(dp).repo(Categories);
|
|
72
|
-
});
|
|
73
|
-
let ok = false;
|
|
74
|
-
try {
|
|
75
|
-
await repo.count({ categoryName: 'a' });
|
|
76
|
-
ok = true;
|
|
77
|
-
}
|
|
78
|
-
catch { }
|
|
79
|
-
expect(ok).toBe(false);
|
|
80
|
-
});
|
|
81
|
-
it("test column error", async () => {
|
|
82
|
-
await deleteAll();
|
|
83
|
-
await remult.repo(Categories).insert([{ categoryName: 'a', id: 1 }]);
|
|
84
|
-
try {
|
|
85
|
-
await remult.repo(testErrorInFromDb).find();
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
expect(err.message).toContain("categoryName");
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
it("LogToConsole true", async () => {
|
|
92
|
-
await deleteAll();
|
|
93
|
-
SqlDatabase.LogToConsole = true;
|
|
94
|
-
console.info = jasmine.createSpy("log");
|
|
95
|
-
await remult.repo(Categories).insert([{ categoryName: 'a', id: 1 }]);
|
|
96
|
-
expect(console.info).toHaveBeenCalledWith(jasmine.objectContaining({
|
|
97
|
-
query: 'insert into Categories (CategoryID, categoryName) values (~1~, ~2~) returning CategoryID, categoryName, description, status',
|
|
98
|
-
arguments: { "~1~": 1, "~2~": 'a' },
|
|
99
|
-
}));
|
|
100
|
-
SqlDatabase.LogToConsole = false;
|
|
101
|
-
});
|
|
102
|
-
it("LogToConsole oneLiner", async () => {
|
|
103
|
-
await deleteAll();
|
|
104
|
-
SqlDatabase.LogToConsole = "oneLiner";
|
|
105
|
-
console.info = jasmine.createSpy("log");
|
|
106
|
-
await remult.repo(Categories).insert([{ categoryName: 'a', id: 1 }]);
|
|
107
|
-
expect(console.info).toHaveBeenCalledWith(jasmine.stringMatching('⚪'));
|
|
108
|
-
SqlDatabase.LogToConsole = false;
|
|
109
|
-
});
|
|
110
|
-
it("LogToConsole fn", async () => {
|
|
111
|
-
await deleteAll();
|
|
112
|
-
SqlDatabase.LogToConsole = (duration, query, args) => { };
|
|
113
|
-
SqlDatabase.LogToConsole = jasmine.createSpy("log");
|
|
114
|
-
await remult.repo(Categories).insert([{ categoryName: 'a', id: 1 }]);
|
|
115
|
-
expect(SqlDatabase.LogToConsole).toHaveBeenCalledWith(jasmine.anything(), 'insert into Categories (CategoryID, categoryName) values (~1~, ~2~) returning CategoryID, categoryName, description, status', jasmine.objectContaining({ "~1~": 1, "~2~": 'a' }));
|
|
116
|
-
SqlDatabase.LogToConsole = false;
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
@Entity("Categories")
|
|
120
|
-
class testErrorInFromDb {
|
|
121
|
-
@Fields.integer({ dbName: 'CategoryID' })
|
|
122
|
-
id = 0;
|
|
123
|
-
@Fields.string({
|
|
124
|
-
valueConverter: {
|
|
125
|
-
fromDb: x => { throw 'error'; }
|
|
126
|
-
}
|
|
127
|
-
})
|
|
128
|
-
categoryName = '';
|
|
129
|
-
}
|
|
130
|
-
testWebSqlImpl("work with native sql", async ({ remult, createEntity }) => {
|
|
131
|
-
const repo = await entityWithValidations.create4RowsInDp(createEntity);
|
|
132
|
-
const sql = SqlDatabase.getDb(remult);
|
|
133
|
-
const r = await sql.execute("select count(*) as c from " + repo.metadata.options.dbName);
|
|
134
|
-
expect(r.rows[0].c).toBe(4);
|
|
135
|
-
}, false);
|
|
136
|
-
testWebSqlImpl("work with native sql2", async ({ remult, createEntity }) => {
|
|
137
|
-
const repo = await entityWithValidations.create4RowsInDp(createEntity);
|
|
138
|
-
const sql = WebSqlDataProvider.getDb(remult);
|
|
139
|
-
await new Promise((res) => {
|
|
140
|
-
sql.transaction(y => {
|
|
141
|
-
y.executeSql("select count(*) as c from " + repo.metadata.options.dbName, undefined, (_, r) => {
|
|
142
|
-
expect(r.rows[0].c).toBe(4);
|
|
143
|
-
res({});
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
}, false);
|
|
148
|
-
testWebSqlImpl("test getEntityDbNames", async ({ remult, createEntity }) => {
|
|
149
|
-
const repo = await entityWithValidations.create4RowsInDp(createEntity);
|
|
150
|
-
const e = await dbNamesOf(repo);
|
|
151
|
-
expect(`select ${e.myId}, ${e.name} from ${e}`)
|
|
152
|
-
.toBe("select myId, name from entityWithValidations");
|
|
153
|
-
}, false);
|
|
154
|
-
testWebSqlImpl("test work with filter", async ({ remult, createEntity }) => {
|
|
155
|
-
const repo = await entityWithValidations.create4RowsInDp(createEntity);
|
|
156
|
-
const e = await dbNamesOf(repo);
|
|
157
|
-
expect(`select ${e.myId}, ${e.name} from ${e} where ${await SqlDatabase.filterToRaw(repo, {
|
|
158
|
-
myId: [1, 3]
|
|
159
|
-
})}`)
|
|
160
|
-
.toBe("select myId, name from entityWithValidations where myId in (1,3)");
|
|
161
|
-
}, false);
|
|
162
|
-
testWebSqlImpl("test work with filter", async ({ remult, createEntity }) => {
|
|
163
|
-
const repo = await entityWithValidations.create4RowsInDp(createEntity);
|
|
164
|
-
const command = SqlDatabase.getDb(remult).createCommand();
|
|
165
|
-
const e = await dbNamesOf(repo);
|
|
166
|
-
expect(`select ${e.myId}, ${e.name} from ${e} where ${await SqlDatabase.filterToRaw(repo, {
|
|
167
|
-
myId: [1, 3]
|
|
168
|
-
}, command)}`)
|
|
169
|
-
.toBe("select myId, name from entityWithValidations where myId in (~1~,~2~)");
|
|
170
|
-
}, false);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|